SELECT 
  products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      products_categories.link_type = "M", 
      CONCAT(
        products_categories.category_id, 
        "M"
      ), 
      products_categories.category_id
    )
  ) AS category_ids 
FROM 
  products_categories 
  INNER JOIN categories ON categories.category_id = products_categories.category_id 
  AND categories.storefront_id IN (0, 1) 
  AND (
    categories.usergroup_ids = '' 
    OR FIND_IN_SET(0, categories.usergroup_ids) 
    OR FIND_IN_SET(1, categories.usergroup_ids)
  ) 
  AND categories.status IN ('A', 'H') 
WHERE 
  products_categories.product_id IN (
    296901, 296878, 296871, 296867, 296879, 
    296918, 296870, 296855, 296866, 296896, 
    296812, 296824, 296915, 296865, 296898, 
    296877, 296907, 296920, 296889, 296921, 
    296926, 296849, 296814, 296859
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00138

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "52.57"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "link_type",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 95,
            "rows_produced_per_join": 95,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "9.82",
              "eval_cost": "9.50",
              "prefix_cost": "19.32",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (296901,296878,296871,296867,296879,296918,296870,296855,296866,296896,296812,296824,296915,296865,296898,296877,296907,296920,296889,296921,296926,296849,296814,296859))"
          }
        },
        {
          "table": {
            "table_name": "categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "goimagine.products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 4,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "23.75",
              "eval_cost": "0.48",
              "prefix_cost": "52.57",
              "data_read_per_join": "12K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`goimagine`.`categories`.`storefront_id` in (0,1)) and ((`goimagine`.`categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`goimagine`.`categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`goimagine`.`categories`.`usergroup_ids`))) and (`goimagine`.`categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
296812 73,22116,22126,2566M
296814 22116,22126,73M
296824 73,22121,22126,2566M
296849 73,22116,22126,2566M
296855 73,22116,22126,2566M
296859 73,22116,22126,2566M
296865 73,22116,22126,2566M
296866 73,22116,22126,2566M
296867 73,22116,22126,2566M
296870 73,22116,22126,2566M
296871 73,22116,22126,2566M
296877 73,22116,22126,2566M
296878 73,22116,22126,2566M
296879 73,22116,22126,2566M
296889 73,22116,22126,2566M
296896 73,22116,22126,2566M
296898 73,22116,22126,2566M
296901 73,22116,22126,2566M
296907 73,22123,22126,2566M
296915 73,22117,22126,2566M
296918 73,22116,22126,2566M
296920 73,22116,22126,2566M
296921 73,22116,22126,2566M
296926 73,22116,22126,2566M