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 (
    267296, 267324, 267308, 281009, 267307, 
    267306, 285546, 269043, 269050, 267309, 
    267317, 267303, 267322, 276327, 267331, 
    280993, 267313, 282231, 281008, 267321, 
    267328, 273575, 269018, 267305
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00120

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "38.27"
    },
    "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": 69,
            "rows_produced_per_join": 69,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "7.22",
              "eval_cost": "6.90",
              "prefix_cost": "14.12",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (267296,267324,267308,281009,267307,267306,285546,269043,269050,267309,267317,267303,267322,276327,267331,280993,267313,282231,281008,267321,267328,273575,269018,267305))"
          }
        },
        {
          "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": 3,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "17.25",
              "eval_cost": "0.35",
              "prefix_cost": "38.27",
              "data_read_per_join": "9K"
            },
            "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
267296 27,20223,6718M
267303 27,20223,6718M
267305 27,20223,6718M
267306 6718,20223,5M
267307 27,20223,6718M
267308 27,20223,6718M
267309 27,20223,6718M
267313 6718,20223,5M
267317 6718,20223,27M
267321 6718,20223,27M
267322 6718,20223,27M
267324 27,20223,6718M
267328 5,20223,6718M
267331 27,20223,6718M
269018 6718,20224,5M
269043 6718,20223,27M
269050 6718,20223,27M
273575 27,20223,6718M
276327 6718,20224,27M
280993 6718,20223,27M
281008 20223,6718M
281009 20223,6718M
282231 20223,6718M
285546 6718,20223,27M