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, 1016, 1017, 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.00105

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "109.25"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.16"
      },
      "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": 5,
            "filtered": "8.60",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (1020,1021,1016,1017,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": "1.03",
              "prefix_cost": "104.09",
              "data_read_per_join": "82"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

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