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 (
    61531, 61355, 61660, 61673, 61532, 61671, 
    61688, 40769, 40774, 40778, 40785, 
    61699, 40810, 62983, 43856, 40771, 
    40789, 61704, 61690, 310237, 310332, 
    310242, 310266, 310338, 310236, 310335, 
    310329, 310330, 310336, 310241, 310328, 
    310334, 310331, 310333, 310238, 310239, 
    310240, 310337
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00220

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "36.61"
    },
    "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": 66,
            "rows_produced_per_join": 66,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "6.91",
              "eval_cost": "6.60",
              "prefix_cost": "13.51",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (61531,61355,61660,61673,61532,61671,61688,40769,40774,40778,40785,61699,40810,62983,43856,40771,40789,61704,61690,310237,310332,310242,310266,310338,310236,310335,310329,310330,310336,310241,310328,310334,310331,310333,310238,310239,310240,310337))"
          }
        },
        {
          "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": 3,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "16.50",
              "eval_cost": "0.33",
              "prefix_cost": "36.61",
              "data_read_per_join": "8K"
            },
            "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
40769 18,2M
40771 2M
40774 2M
40778 2M
40785 2M
40789 2M
40810 2M
43856 13,15,2M
61355 18,2M
61531 18,2M
61532 18,2M
61660 18,2M
61671 18,2M
61673 18,2M
61688 18,2M
61690 18,2M
61699 18,2M
61704 18,2M
62983 18,2M
310236 18,2M
310237 2M
310238 2M
310239 2M
310240 2M
310241 2M
310242 2M
310266 13,15,2M
310328 18,2M
310329 18,2M
310330 18,2M
310331 18,2M
310332 18,2M
310333 18,2M
310334 18,2M
310335 18,2M
310336 18,2M
310337 18,2M
310338 18,2M