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 (
    32881, 32882, 32883, 32884, 32885, 32886, 
    32887, 32888, 32889, 32890, 32891, 
    10533, 10532, 10531, 10530, 10529, 
    10524, 10521, 8380, 8381, 8383, 8384, 
    8385, 8386, 8387, 8388, 8389, 8390, 
    8391, 8392, 8393, 8394
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00081

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "141.21"
    },
    "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": 42,
            "rows_produced_per_join": 42,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,10533,10532,10531,10530,10529,10524,10521,8380,8381,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394))",
            "cost_info": {
              "read_cost": "82.41",
              "eval_cost": "8.40",
              "prefix_cost": "90.81",
              "data_read_per_join": "672"
            },
            "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": 8,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "42.00",
              "eval_cost": "1.68",
              "prefix_cost": "141.21",
              "data_read_per_join": "22K"
            },
            "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
8380 97M
8381 97M
8383 96M
8384 96M
8385 96M
8386 96M
8387 96M
8388 96M
8389 96M
8390 96M
8391 96M
8392 96M
8393 96M
8394 96M
10521 96M
10524 96,97M
10529 96M
10530 96M
10531 97M
10532 97M
10533 97M
32881 97M
32882 97M
32883 97M
32884 97M
32885 97M
32886 97M
32887 97M
32888 97M
32889 97M
32890 97M
32891 97M