SELECT 
  products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      products_categories.link_type = "M", 
      CONCAT(
        products_categories.category_id, 
        "M"
      ), 
      products_categories.category_id
    )
  ) AS category_ids 
FROM 
  products_categories 
  INNER JOIN categories ON categories.category_id = products_categories.category_id 
  AND categories.storefront_id IN (0, 1) 
  AND (
    categories.usergroup_ids = '' 
    OR FIND_IN_SET(0, categories.usergroup_ids) 
    OR FIND_IN_SET(1, categories.usergroup_ids)
  ) 
  AND categories.status IN ('A', 'H') 
WHERE 
  products_categories.product_id IN (
    296873, 296839, 296831, 296893, 296928, 
    296832, 296841, 296919, 296881, 296861, 
    296883, 296838, 296848, 296853, 296899, 
    296846, 296833, 296858, 296886, 296894, 
    296835, 296869, 296892, 296837
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00121

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "53.12"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "link_type",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 96,
            "rows_produced_per_join": 96,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "9.92",
              "eval_cost": "9.60",
              "prefix_cost": "19.52",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (296873,296839,296831,296893,296928,296832,296841,296919,296881,296861,296883,296838,296848,296853,296899,296846,296833,296858,296886,296894,296835,296869,296892,296837))"
          }
        },
        {
          "table": {
            "table_name": "categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "goimagine.products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 4,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "24.00",
              "eval_cost": "0.48",
              "prefix_cost": "53.12",
              "data_read_per_join": "12K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`goimagine`.`categories`.`storefront_id` in (0,1)) and ((`goimagine`.`categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`goimagine`.`categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`goimagine`.`categories`.`usergroup_ids`))) and (`goimagine`.`categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
296831 73,22122,22126,2566M
296832 73,22122,22126,2566M
296833 73,22122,22126,2566M
296835 73,22122,22126,2566M
296837 73,22118,22126,2566M
296838 73,22116,22126,2566M
296839 73,22116,22126,2566M
296841 73,22116,22126,2566M
296846 73,22116,22126,2566M
296848 87,22118,22126,2566M
296853 73,22116,22126,2566M
296858 73,22116,22126,2566M
296861 73,22116,22126,2566M
296869 73,22116,22126,2566M
296873 73,22116,22126,2566M
296881 73,22116,22126,2566M
296883 73,22116,22126,2566M
296886 6649,22119,22126,2566M
296892 6724,22116,22126,2566M
296893 73,22116,22126,2566M
296894 73,22116,22126,2566M
296899 73,22116,22126,2566M
296919 73,22116,22126,2566M
296928 73,22122,22126,2566M