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 = 45 
WHERE 
  jmj_products_categories.product_id IN (
    1705, 1713, 1702, 1719, 1723, 1696, 1699, 
    1707, 1697, 1735, 1695, 1686, 1721, 
    1636, 1627, 1638, 1640, 1618, 1621, 
    1632, 1620, 1624, 1616, 1613, 1639
  ) 
GROUP BY 
  jmj_products_categories.product_id

Query time 0.00654

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "62.80"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "1.56"
      },
      "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.49",
            "index_condition": "(`jmj_test`.`jmj_products_categories`.`product_id` in (1705,1713,1702,1719,1723,1696,1699,1707,1697,1735,1695,1686,1721,1636,1627,1638,1640,1618,1621,1632,1620,1624,1616,1613,1639))",
            "cost_info": {
              "read_cost": "25.15",
              "eval_cost": "0.31",
              "prefix_cost": "59.37",
              "data_read_per_join": "24"
            },
            "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.56",
              "eval_cost": "0.31",
              "prefix_cost": "61.24",
              "data_read_per_join": "24"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
1613 47M
1616 48M
1618 49M
1620 51M
1621 50M
1624 52M
1627 53M
1632 57M
1636 59M
1638 55M
1639 56M
1640 58M
1686 47M
1695 48M
1696 49M
1697 51M
1699 50M
1702 53M
1705 54M
1707 57M
1713 59M
1719 55M
1721 56M
1723 58M
1735 52M