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 (
    296884, 296840, 296925, 296885, 296815, 
    296844, 296874, 296922, 296903, 296924, 
    296930, 296843, 296902, 296910, 296891, 
    296863, 296923, 296850, 296887, 296816, 
    296916, 296813, 296856, 296854
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00148

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 (296884,296840,296925,296885,296815,296844,296874,296922,296903,296924,296930,296843,296902,296910,296891,296863,296923,296850,296887,296816,296916,296813,296856,296854))"
          }
        },
        {
          "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
296813 71,22116,22126,2566M
296815 73,22116,22126,2566M
296816 73,22123,22126,2566M
296840 73,22116,22126,2566M
296843 73,22116,22126,2566M
296844 73,22116,22126,2566M
296850 73,22116,22126,2566M
296854 73,22116,22126,2566M
296856 73,22116,22126,2566M
296863 73,22116,22126,2566M
296874 73,22116,22126,2566M
296884 73,22123,22126,2566M
296885 73,22123,22126,2566M
296887 6648,22123,22126,2566M
296891 73,22116,22126,2566M
296902 73,22116,22126,2566M
296903 73,22123,22126,2566M
296910 73,22122,22126,2566M
296916 73,22116,22126,2566M
296922 73,22116,22126,2566M
296923 73,22116,22126,2566M
296924 73,22116,22126,2566M
296925 73,22116,22126,2566M
296930 73,22118,22126,2566M