SELECT 
  cscart_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      cscart_products_categories.link_type = "M", 
      CONCAT(
        cscart_products_categories.category_id, 
        "M"
      ), 
      cscart_products_categories.category_id
    )
  ) AS category_ids 
FROM 
  cscart_products_categories 
  INNER JOIN cscart_categories ON cscart_categories.category_id = cscart_products_categories.category_id 
  AND cscart_categories.storefront_id IN (0, 1) 
  AND (
    cscart_categories.usergroup_ids = '' 
    OR FIND_IN_SET(
      0, cscart_categories.usergroup_ids
    ) 
    OR FIND_IN_SET(
      1, cscart_categories.usergroup_ids
    )
  ) 
  AND cscart_categories.status IN ('A', 'H') 
WHERE 
  cscart_products_categories.product_id IN (
    51297, 51296, 139, 51300, 51299, 51298, 
    51304, 51303, 51302, 51301, 138, 51443, 
    51309, 51308, 51307, 51306, 51305, 
    129, 51318, 51317, 51316, 51, 51319, 
    51323, 51322, 51321, 51320, 50, 51324, 
    51564, 51568, 51569, 51570, 51571, 
    51572, 51573, 51565, 51574, 51575, 
    51576, 51577, 51566, 51578, 51579, 
    51580, 51581, 51567, 51582, 51583, 
    51584, 51585, 51586
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00210

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "143.41"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 163,
            "rows_produced_per_join": 163,
            "filtered": "100.00",
            "index_condition": "(`test_uchur_k`.`cscart_products_categories`.`product_id` in (51297,51296,139,51300,51299,51298,51304,51303,51302,51301,138,51443,51309,51308,51307,51306,51305,129,51318,51317,51316,51,51319,51323,51322,51321,51320,50,51324,51564,51568,51569,51570,51571,51572,51573,51565,51574,51575,51576,51577,51566,51578,51579,51580,51581,51567,51582,51583,51584,51585,51586))",
            "cost_info": {
              "read_cost": "70.06",
              "eval_cost": "16.30",
              "prefix_cost": "86.36",
              "data_read_per_join": "2K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "test_uchur_k.cscart_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 8,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "40.75",
              "eval_cost": "0.82",
              "prefix_cost": "143.41",
              "data_read_per_join": "43K"
            },
            "used_columns": [
              "category_id",
              "storefront_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "((`test_uchur_k`.`cscart_categories`.`storefront_id` in (0,1)) and ((`test_uchur_k`.`cscart_categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`test_uchur_k`.`cscart_categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`test_uchur_k`.`cscart_categories`.`usergroup_ids`))) and (`test_uchur_k`.`cscart_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
50 23,44,40M
51 23,43,40M
129 42,24,40M
138 42,24,40M
139 42,24,40M
51296 24,42,40M
51297 24,42,40M
51298 42,24,40M
51299 24,42,40M
51300 24,42,40M
51301 24,42,40M
51302 24,42,40M
51303 24,42,40M
51304 24,42,40M
51305 24,42,40M
51306 24,42,40M
51307 24,42,40M
51308 42,24,40M
51309 24,42,40M
51316 23,43,40M
51317 43,23,40M
51318 43,23,40M
51319 43,23,40M
51320 44,23,40M
51321 44,23,40M
51322 44,23,40M
51323 44,23,40M
51324 44,23,40M
51443 42,24,40M
51564 40,42,9M
51565 10,42,40M
51566 40,42,9M
51567 40,42,10M
51568 40,42,9M
51569 42,40,9M
51570 42,40,9M
51571 40,42,9M
51572 40,42,9M
51573 42,40,9M
51574 42,10,40M
51575 42,10,40M
51576 42,10,40M
51577 42,10,40M
51578 42,40,9M
51579 42,40,9M
51580 40,42,9M
51581 40,42,9M
51582 42,40,10M
51583 42,40,10M
51584 42,40,10M
51585 42,40,10M
51586 42,40,10M