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 (
    749, 752, 751, 750, 748, 761, 760, 759, 
    770, 769, 768, 801, 800, 799, 798, 797, 
    806, 805, 804, 803, 802, 810, 809, 808, 
    807, 814, 813, 823, 822, 1013, 1014
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00102

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "110.18"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "4.46"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 126,
            "rows_produced_per_join": 5,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "29.72",
              "eval_cost": "1.01",
              "prefix_cost": "30.73",
              "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": "7.37",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (749,752,751,750,748,761,760,759,770,769,768,801,800,799,798,797,806,805,804,803,802,810,809,808,807,814,813,823,822,1013,1014))",
            "cost_info": {
              "read_cost": "62.90",
              "eval_cost": "0.89",
              "prefix_cost": "105.72",
              "data_read_per_join": "71"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
748 375,377,382M
749 375,377,382M
750 375,377,382M
751 375,377,382M
752 382M,375,377
759 382M,375,377
760 375,377,382M
761 375,377,382M
768 381M,375,376
769 381M,375,376
770 381M,375,376
797 392,396M,393
798 392,396M,393
799 393,392,396M
800 396M,393,392
801 396M,393,392
802 396M,393,392
803 392,396M,393
804 392,396M,393
805 392,396M,393
806 393,392,396M
807 396M,393,392
808 396M,393,392
809 392,396M,393
810 392,396M,393
813 392,397M,394
814 394,392,397M
822 398M,395,392
823 398M,395,392
1013 345,309,356M
1014 309,356M,345