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

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