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 = 248 
WHERE 
  q_products_categories.product_id IN (
    1593, 1594, 1595, 1596, 1597, 1598, 1599, 
    1600, 1601, 1602, 1603, 1605, 1606, 
    1607, 1610, 1611, 1612, 1613, 1614, 
    1615, 1616, 1617, 1618, 1624, 1625, 
    1626, 1627, 1628
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00090

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "134.41"
    },
    "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": 28,
            "rows_produced_per_join": 28,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1605,1606,1607,1610,1611,1612,1613,1614,1615,1616,1617,1618,1624,1625,1626,1627,1628))",
            "cost_info": {
              "read_cost": "61.61",
              "eval_cost": "5.60",
              "prefix_cost": "67.21",
              "data_read_per_join": "448"
            },
            "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": 28,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "28.00",
              "eval_cost": "5.60",
              "prefix_cost": "100.81",
              "data_read_per_join": "448"
            },
            "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": 5,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "28.00",
              "eval_cost": "1.12",
              "prefix_cost": "134.41",
              "data_read_per_join": "14K"
            },
            "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
1593 167,393M
1594 167,276M
1595 276M
1596 167,276M
1597 393M
1598 393M
1599 276M
1600 276M
1601 393M
1602 393M
1603 276M
1605 276M
1606 276M
1607 276M
1610 393M
1611 393M
1612 393M
1613 393M
1614 393M
1615 393M
1616 393M
1617 393M
1618 393M
1624 364M
1625 364M
1626 364M
1627 364M
1628 364M