SELECT 
  q_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      q_products_categories.link_type = "M", 
      CONCAT(
        q_products_categories.category_id, 
        "M"
      ), 
      q_products_categories.category_id
    )
  ) AS category_ids 
FROM 
  q_products_categories 
  INNER JOIN q_categories ON q_categories.category_id = q_products_categories.category_id 
  AND (
    q_categories.usergroup_ids = '' 
    OR FIND_IN_SET(0, q_categories.usergroup_ids) 
    OR FIND_IN_SET(1, q_categories.usergroup_ids)
  ) 
  AND q_categories.status IN ('A', 'H') 
WHERE 
  q_products_categories.product_id IN (
    32554, 32555, 32556, 32557, 32558, 32559, 
    32560, 32562, 32563, 32564, 32565, 
    32566, 32567, 32568, 32569, 32570, 
    32571, 32573, 32574, 32575, 32576, 
    32577, 32579, 32580, 32581, 32582, 
    32583, 32584, 32585, 32586, 32588, 
    32589
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00081

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "125.61"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "q_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 36,
            "rows_produced_per_join": 36,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (32554,32555,32556,32557,32558,32559,32560,32562,32563,32564,32565,32566,32567,32568,32569,32570,32571,32573,32574,32575,32576,32577,32579,32580,32581,32582,32583,32584,32585,32586,32588,32589))",
            "cost_info": {
              "read_cost": "75.21",
              "eval_cost": "7.20",
              "prefix_cost": "82.41",
              "data_read_per_join": "576"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "table": {
            "table_name": "q_categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "portal.q_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 7,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "36.00",
              "eval_cost": "1.44",
              "prefix_cost": "125.61",
              "data_read_per_join": "19K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "(((`portal`.`q_categories`.`usergroup_ids` = '') or find_in_set(0,`portal`.`q_categories`.`usergroup_ids`) or find_in_set(1,`portal`.`q_categories`.`usergroup_ids`)) and (`portal`.`q_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
32554 97M
32555 96M
32556 96M
32557 96M
32558 96M
32559 96M
32560 96M
32562 96M
32563 96M
32564 96M
32565 96M
32566 96M
32567 96M
32568 96M
32569 96M
32570 97M
32571 97M
32573 97M
32574 97M
32575 97M
32576 97M
32577 96M
32579 97M
32580 97M
32581 96M
32582 96M
32583 96M
32584 96M
32585 96M
32586 96M
32588 96M
32589 96M