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 = 78 
WHERE 
  jmj_products_categories.product_id IN (
    1701, 1708, 1726, 1694, 1693, 1712, 1715, 
    1716, 1718, 1724, 1722, 1736, 1706, 
    1710, 1698, 1585, 1591, 1612, 1583, 
    1568, 1596, 1599, 1600, 1603, 1609, 
    1605, 1586, 1589, 1594, 1584
  ) 
GROUP BY 
  jmj_products_categories.product_id

Query time 0.02034

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "62.70"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "1.51"
      },
      "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.30",
            "index_condition": "(`jmj_test`.`jmj_products_categories`.`product_id` in (1701,1708,1726,1694,1693,1712,1715,1716,1718,1724,1722,1736,1706,1710,1698,1585,1591,1612,1583,1568,1596,1599,1600,1603,1609,1605,1586,1589,1594,1584))",
            "cost_info": {
              "read_cost": "25.15",
              "eval_cost": "0.30",
              "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.51",
              "eval_cost": "0.30",
              "prefix_cost": "61.19",
              "data_read_per_join": "24"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
1568 88M
1583 109M
1584 110M
1585 111M
1586 112M
1589 113M
1591 114M
1594 115M
1596 116M
1599 117M
1600 118M
1603 119M
1605 120M
1609 121M
1612 122M
1693 88M
1694 109M
1698 110M
1701 111M
1706 113M
1708 114M
1710 115M
1712 116M
1715 117M
1716 118M
1718 119M
1722 120M
1724 121M
1726 122M
1736 112M