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

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