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 (
    120610, 120595, 120598, 120606, 120603, 
    144383, 144387, 195555, 120609, 120601, 
    120604, 216344, 120614, 120596, 144381, 
    182695, 216291, 120597, 195556, 144384, 
    180765, 216289, 120612, 144382
  ) 
GROUP BY 
  products_categories.product_id

Query time 0.00123

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "38.25"
    },
    "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.20",
              "eval_cost": "6.90",
              "prefix_cost": "14.10",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`goimagine`.`products_categories`.`product_id` in (120610,120595,120598,120606,120603,144383,144387,195555,120609,120601,120604,216344,120614,120596,144381,182695,216291,120597,195556,144384,180765,216289,120612,144382))"
          }
        },
        {
          "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.25",
              "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
120595 388,12038,2566M
120596 388,12038,2566M
120597 388,12038,2566M
120598 86,12036,388M
120601 388,12038,2566M
120603 388,12038,2566M
120604 388,12038,2566M
120606 388,12038,2566M
120609 388,12036,2566M
120610 388,12036,2566M
120612 388,12036,2566M
120614 388,12038,2566M
144381 388,12033,2566M
144382 388,12036,2566M
144383 388,12036,2566M
144384 388,12041,2566M
144387 388,12033,2566M
180765 388,12041,2566M
182695 12035,45M
195555 12035,45M
195556 12035,45M
216289 46,14763,4M
216291 46,14763,4M
216344 46,14763,4M