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.00105

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 382M,375,377
752 382M,375,377
759 375,377,382M
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 393,392,396M
799 393,392,396M
800 396M,393,392
801 396M,393,392
802 392,396M,393
803 392,396M,393
804 392,396M,393
805 393,392,396M
806 396M,393,392
807 396M,393,392
808 392,396M,393
809 392,396M,393
810 392,396M,393
813 394,392,397M
814 397M,394,392
822 398M,395,392
823 398M,395,392
1013 356M,345,309
1014 345,309,356M