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 (
    833, 832, 841, 840, 839, 838, 837, 853, 
    852, 858, 857, 856, 855, 854, 867, 866, 
    865, 864, 872, 871, 870, 869, 868, 874, 
    873, 878, 877, 876, 875
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00096

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "109.84"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "4.12"
      },
      "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": "6.81",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (833,832,841,840,839,838,837,853,852,858,857,856,855,854,867,866,865,864,872,871,870,869,868,874,873,878,877,876,875))",
            "cost_info": {
              "read_cost": "62.90",
              "eval_cost": "0.82",
              "prefix_cost": "105.72",
              "data_read_per_join": "65"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
832 366,301,374M
833 374M,366,301
837 302,368M,301
838 301,302,368M
839 368M,301,302
840 368M,301,302
841 368M,301,302
852 369M,301,302
853 302,369M,301
854 301,302,369M
855 301,302,369M
856 369M,301,302
857 369M,301,302
858 369M,301,302
864 302,369M,301
865 302,369M,301
866 301,302,369M
867 369M,301,302
868 369M,301,302
869 369M,301,302
870 369M,301,302
871 302,369M,301
872 301,302,369M
873 301,302,370M
874 301,302,370M
875 301,302,369M
876 369M,301,302
877 302,369M,301
878 301,302,369M