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, 
  product_position_source.position AS position 
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') 
  LEFT JOIN q_products_categories AS product_position_source ON q_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 61 
WHERE 
  q_products_categories.product_id IN (
    50381, 50382, 50383, 50385, 50386, 50387, 
    50388, 50389, 50390, 50391, 50392, 
    50393, 50232, 50240, 50310, 50308, 
    50283, 50301, 50280, 50291, 50272, 
    50276, 50269, 50312, 50313, 50314, 
    50315, 50316, 50317, 50318
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00097

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "159.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": 34,
            "rows_produced_per_join": 34,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (50381,50382,50383,50385,50386,50387,50388,50389,50390,50391,50392,50393,50232,50240,50310,50308,50283,50301,50280,50291,50272,50276,50269,50312,50313,50314,50315,50316,50317,50318))",
            "cost_info": {
              "read_cost": "70.81",
              "eval_cost": "6.80",
              "prefix_cost": "77.61",
              "data_read_per_join": "544"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "table": {
            "table_name": "product_position_source",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id",
              "product_id"
            ],
            "key_length": "6",
            "ref": [
              "const",
              "portal.q_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 34,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "34.00",
              "eval_cost": "6.80",
              "prefix_cost": "118.41",
              "data_read_per_join": "544"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        },
        {
          "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": 6,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "34.00",
              "eval_cost": "1.36",
              "prefix_cost": "159.21",
              "data_read_per_join": "17K"
            },
            "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 position
50232 9M
50240 9M
50269 9M
50272 9M
50276 9M
50280 9M
50283 9M
50291 9M
50301 9M
50308 9M
50310 9M
50312 9M
50313 9M
50314 9M
50315 9M
50316 9M
50317 9M
50318 9M
50381 9M
50382 9M
50383 9M
50385 9M
50386 9M
50387 9M
50388 9M
50389 9M
50390 9M
50391 9M
50392 9M
50393 9M