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 (
    601, 602, 603, 604, 607, 608, 623, 624, 
    801, 800, 799, 798, 797, 806, 805, 804, 
    803, 802, 814, 813, 960, 961, 962, 963, 
    964, 965, 966, 1013, 1014
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00158

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "108.23"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "4.14"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 125,
            "rows_produced_per_join": 5,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "29.49",
              "eval_cost": "1.00",
              "prefix_cost": "30.49",
              "data_read_per_join": "20K"
            },
            "used_columns": [
              "category_id",
              "storefront_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "((`cscart`.`cscart_categories`.`storefront_id` in (0,1)) and ((`cscart`.`cscart_categories`.`usergroup_ids` = '') or find_in_set(0,`cscart`.`cscart_categories`.`usergroup_ids`) or find_in_set(1,`cscart`.`cscart_categories`.`usergroup_ids`)) and (`cscart`.`cscart_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "cscart.cscart_categories.category_id"
            ],
            "rows_examined_per_scan": 12,
            "rows_produced_per_join": 4,
            "filtered": "6.90",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (601,602,603,604,607,608,623,624,801,800,799,798,797,806,805,804,803,802,814,813,960,961,962,963,964,965,966,1013,1014))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "0.83",
              "prefix_cost": "104.09",
              "data_read_per_join": "66"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
601 303,305M,329
602 303,305M,329
603 303,305M,329
604 329,303,305M
607 333M,335,343
608 333M,335,343
623 335,343,333M
624 333M,335,343
797 396M,393,392
798 396M,393,392
799 396M,393,392
800 392,396M,393
801 393,392,396M
802 396M,393,392
803 396M,393,392
804 396M,393,392
805 396M,393,392
806 392,396M,393
813 394,392,397M
814 397M,394,392
960 333,335M,341
961 333,335M,341
962 342M,333,335
963 342M,333,335
964 342M,333,335
965 335,344M,333
966 333,335,344M
1013 309,356M,345
1014 345,309,356M