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 (
    1020, 1021, 638, 639, 980, 981, 982, 983, 
    984, 985, 986, 987, 988, 990, 991, 992, 
    993, 994, 995, 996, 997, 998, 999, 1000, 
    1001, 1002, 1003, 1004, 1005, 1006, 
    1007, 1008, 1009, 1010, 1011
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00137

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "108.96"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "4.87"
      },
      "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": "8.12",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (1020,1021,638,639,980,981,982,983,984,985,986,987,988,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "0.97",
              "prefix_cost": "104.09",
              "data_read_per_join": "77"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
638 365,363,309M
639 309M,365,363
980 363,309,364M
981 364M,363,309
982 364M,363,309
983 364M,363,309
984 364M,363,309
985 309,364M,363
986 309,364M,363
987 363,309,364M
988 364M,363,309
990 364M,363,309
991 364M,363,309
992 363,365M,309
993 365M,309,363
994 363,365M,309
995 363,365M,309
996 363,365M,309
997 363,365M,309
998 363,365M,309
999 365M,309,363
1000 363,365M,309
1001 363,365M,309
1002 363,365M,309
1003 363,365M,309
1004 363,365M,309
1005 309,363,365M
1006 365M,309,363
1007 363,365M,309
1008 363,365M,309
1009 363,365M,309
1010 363,365M,309
1011 363,365M,309
1020 309,360,346M
1021 309,360,346M