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 (
    226228, 234194, 226414, 231093, 226634, 
    231043, 257532, 257544, 231088, 234193, 
    226235, 258228, 231041, 234246, 257533, 
    230547, 231090, 231400, 257529, 238681, 
    257552, 234207, 231092, 257551
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00203

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "42.66"
    },
    "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": 77,
            "rows_produced_per_join": 77,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "8.01",
              "eval_cost": "7.70",
              "prefix_cost": "15.71",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (226228,234194,226414,231093,226634,231043,257532,257544,231088,234193,226235,258228,231041,234246,257533,230547,231090,231400,257529,238681,257552,234207,231092,257551))"
          }
        },
        {
          "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": "19.25",
              "eval_cost": "0.39",
              "prefix_cost": "42.66",
              "data_read_per_join": "10K"
            },
            "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
226228 31,15578,15581,23M
226235 212,15616,31M
226414 31,15634,75M
226634 82,15585,15591,132M
230547 15636,31M
231041 23,16033,212M
231043 23,16033,212M
231088 82,15585,15591,137M
231090 82,15585,15591,137M
231092 82,15585,15591,137M
231093 82,15585,15591,137M
231400 191,16111,185M
234193 31,15590,191M
234194 31,15590,191M
234207 31,15581,100M
234246 31,15579,191M
238681 31,15590,191M
257529 31,15588,205M
257532 31,15588,205M
257533 31,15588,205M
257544 31,15584,139M
257551 31,15584,139M
257552 31,15584,139M
258228 212,15581,31M