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 (
    41334, 41335, 41336, 41337, 41338, 41339, 
    33089, 33090, 33091, 33092, 33093, 
    33094, 33095, 33096, 33097, 33098, 
    33100, 33101, 33102, 33103, 33104, 
    33105, 33106, 33107, 33108, 33109, 
    33110, 33111, 33112, 33113, 33114, 
    33115
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00069

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "201.01"
    },
    "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": 65,
            "rows_produced_per_join": 65,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (41334,41335,41336,41337,41338,41339,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115))",
            "cost_info": {
              "read_cost": "110.01",
              "eval_cost": "13.00",
              "prefix_cost": "123.01",
              "data_read_per_join": "1K"
            },
            "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": 13,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "65.00",
              "eval_cost": "2.60",
              "prefix_cost": "201.01",
              "data_read_per_join": "34K"
            },
            "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
33089 96M
33090 96M
33091 96M
33092 96M
33093 96M
33094 96M
33095 96M
33096 96M
33097 96M
33098 96M
33100 96M
33101 96M
33102 96M
33103 96M
33104 96M
33105 96M
33106 96M
33107 96M
33108 96M
33109 96M
33110 96M
33111 96M
33112 96M
33113 96M
33114 96M
33115 96M
41334 93M
41335 93M
41336 93M
41337 93M
41338 93M
41339 93M