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 (
    4470, 9573, 2637, 10372, 10373, 10259, 
    4303, 9610, 9609, 649, 654, 677, 716, 
    656, 661, 4810, 1928, 1929, 2230, 9608, 
    10235, 10236, 10233, 4811, 4814
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.04096

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "212.21"
    },
    "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": 72,
            "rows_produced_per_join": 72,
            "filtered": "100.00",
            "index_condition": "(`ea201_francemaqu`.`cscart_products_categories`.`product_id` in (4470,9573,2637,10372,10373,10259,4303,9610,9609,649,654,677,716,656,661,4810,1928,1929,2230,9608,10235,10236,10233,4811,4814))",
            "cost_info": {
              "read_cost": "111.41",
              "eval_cost": "14.40",
              "prefix_cost": "125.81",
              "data_read_per_join": "1K"
            },
            "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": [
              "ea201_francemaqu.cscart_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 3,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "72.00",
              "eval_cost": "0.72",
              "prefix_cost": "212.21",
              "data_read_per_join": "9K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`ea201_francemaqu`.`cscart_categories`.`storefront_id` in (0,1)) and ((`ea201_francemaqu`.`cscart_categories`.`usergroup_ids` = '') or find_in_set(0,`ea201_francemaqu`.`cscart_categories`.`usergroup_ids`) or find_in_set(1,`ea201_francemaqu`.`cscart_categories`.`usergroup_ids`)) and (`ea201_francemaqu`.`cscart_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
649 41M
654 41M
656 41M
661 41M
677 41M
716 41M
1928 89,87M
1929 89,87M
2230 23,24,34,43,44M
2637 23,35,89,87M
4303 483,487,89,36,116,24,23M
4470 44M
4810 17,89,87M
4811 89,23,34,87M
4814 23,89,34,87M
9573 487,89,87,36M
9608 491,487,87,89M
9609 487,87,89M
9610 487,87,89M
10233 487,89,87,36M
10235 89,87,36M
10236 87,89,36M
10259 36,24,23,89M
10372 487,89,87,36M
10373 34,89M