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 (
    969, 970, 636, 637, 972, 973, 974, 975, 
    699, 700, 701, 702, 774, 775, 776, 777, 
    778, 779, 780, 781, 782, 783, 784, 785, 
    786, 787, 788, 789, 790, 791, 792, 793, 
    794, 795, 1025, 1026, 1027
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00112

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "109.35"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.26"
      },
      "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.77",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (969,970,636,637,972,973,974,975,699,700,701,702,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,1025,1026,1027))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "1.05",
              "prefix_cost": "104.09",
              "data_read_per_join": "84"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
636 350,309M,310
637 350,309M,310
699 298,405M,404
700 298,405M,404
701 404,298,405M
702 404,298,405M
774 404,298,405M
775 405M,404,298
776 405M,404,298
777 298,405M,404
778 404,298,405M
779 404,298,405M
780 404,298,405M
781 404,298,405M
782 405M,404,298
783 298,405M,404
784 298,405M,404
785 299,391M,298
786 299,391M,298
787 299,391M,298
788 299,391M,298
789 299,391M,298
790 298,299,391M
791 299,391M,298
792 299,391M,298
793 299,391M,298
794 299,391M,298
795 299,391M,298
969 310,349M,309
970 309,310,349M
972 309,350M,310
973 309,350M,310
974 309,350M,310
975 309,350M,310
1025 400,401M,399
1026 399,400,401M
1027 401M,399,400