SELECT 
  jmj_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      jmj_products_categories.link_type = "M", 
      CONCAT(
        jmj_products_categories.category_id, 
        "M"
      ), 
      jmj_products_categories.category_id
    )
  ) AS category_ids, 
  product_position_source.position AS position 
FROM 
  jmj_products_categories 
  INNER JOIN jmj_categories ON jmj_categories.category_id = jmj_products_categories.category_id 
  AND jmj_categories.storefront_id IN (0, 1) 
  AND (
    jmj_categories.usergroup_ids = '' 
    OR FIND_IN_SET(0, jmj_categories.usergroup_ids) 
    OR FIND_IN_SET(1, jmj_categories.usergroup_ids)
  ) 
  AND jmj_categories.status IN ('A', 'H') 
  LEFT JOIN jmj_products_categories AS product_position_source ON jmj_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 5 
WHERE 
  jmj_products_categories.product_id IN (
    1717, 1727, 1704, 1690, 1685, 1700, 1709, 
    1714, 1711, 1720, 1703, 1725, 1629, 
    1635, 1614, 1606, 1602, 1608, 1631, 
    1637, 1634, 1630, 1611, 1633
  ) 
GROUP BY 
  jmj_products_categories.product_id

Query time 0.00603

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "62.60"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "1.47"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "jmj_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 120,
            "rows_produced_per_join": 4,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "28.46",
              "eval_cost": "0.96",
              "prefix_cost": "29.42",
              "data_read_per_join": "18K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`jmj_test`.`jmj_categories`.`storefront_id` in (0,1)) and ((`jmj_test`.`jmj_categories`.`usergroup_ids` = '') or find_in_set(0,`jmj_test`.`jmj_categories`.`usergroup_ids`) or find_in_set(1,`jmj_test`.`jmj_categories`.`usergroup_ids`)) and (`jmj_test`.`jmj_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "jmj_products_categories",
            "access_type": "ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "jmj_test.jmj_categories.category_id"
            ],
            "rows_examined_per_scan": 5,
            "rows_produced_per_join": 1,
            "filtered": "6.11",
            "index_condition": "(`jmj_test`.`jmj_products_categories`.`product_id` in (1717,1727,1704,1690,1685,1700,1709,1714,1711,1720,1703,1725,1629,1635,1614,1606,1602,1608,1631,1637,1634,1630,1611,1633))",
            "cost_info": {
              "read_cost": "25.15",
              "eval_cost": "0.29",
              "prefix_cost": "59.37",
              "data_read_per_join": "23"
            },
            "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",
              "jmj_test.jmj_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 1,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "1.47",
              "eval_cost": "0.29",
              "prefix_cost": "61.13",
              "data_read_per_join": "23"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
1602 92M
1606 93M
1608 94M
1611 95M
1614 96M
1629 100M
1630 101M
1631 97M
1633 102M
1634 98M
1635 103M
1637 99M
1685 92M
1690 93M
1700 94M
1703 95M
1704 96M
1709 97M
1711 98M
1714 99M
1717 100M
1720 101M
1725 102M
1727 103M