SELECT 
  cscart_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      cscart_products_categories.link_type = "M", 
      CONCAT(
        cscart_products_categories.category_id, 
        "M"
      ), 
      cscart_products_categories.category_id
    )
  ) AS category_ids, 
  product_position_source.position AS position 
FROM 
  cscart_products_categories 
  INNER JOIN cscart_categories ON cscart_categories.category_id = cscart_products_categories.category_id 
  AND cscart_categories.storefront_id IN (0, 1) 
  AND (
    cscart_categories.usergroup_ids = '' 
    OR FIND_IN_SET(
      0, cscart_categories.usergroup_ids
    ) 
    OR FIND_IN_SET(
      1, cscart_categories.usergroup_ids
    )
  ) 
  AND cscart_categories.status IN ('A', 'H') 
  LEFT JOIN cscart_products_categories AS product_position_source ON cscart_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 7237 
WHERE 
  cscart_products_categories.product_id IN (
    96579, 96580, 96581, 96582, 96583, 96584, 
    96585, 96586, 96587, 96588, 96589, 
    96590, 96591, 96592, 96593, 96594, 
    96595, 96596, 96597, 96598, 96599, 
    96600, 96677, 96679, 96684, 96685, 
    96693, 98445, 98682, 99369, 99370, 
    99371, 99372, 99373, 99399, 99400, 
    99401, 99402, 99403, 99507, 99511, 
    99515, 100361, 100362, 100363, 100364, 
    100365, 100366
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00090

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "43.48"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "link_type",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 48,
            "rows_produced_per_join": 48,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "5.08",
              "eval_cost": "4.80",
              "prefix_cost": "9.88",
              "data_read_per_join": "768"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`nuie_scalesta_net`.`cscart_products_categories`.`product_id` in (96579,96580,96581,96582,96583,96584,96585,96586,96587,96588,96589,96590,96591,96592,96593,96594,96595,96596,96597,96598,96599,96600,96677,96679,96684,96685,96693,98445,98682,99369,99370,99371,99372,99373,99399,99400,99401,99402,99403,99507,99511,99515,100361,100362,100363,100364,100365,100366))"
          }
        },
        {
          "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",
              "nuie_scalesta_net.cscart_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 48,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "12.00",
              "eval_cost": "4.80",
              "prefix_cost": "26.68",
              "data_read_per_join": "768"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        },
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "nuie_scalesta_net.cscart_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 2,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "12.00",
              "eval_cost": "0.24",
              "prefix_cost": "43.48",
              "data_read_per_join": "6K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`nuie_scalesta_net`.`cscart_categories`.`storefront_id` in (0,1)) and ((`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids`))) and (`nuie_scalesta_net`.`cscart_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
96579 7270M
96580 7270M
96581 7272M
96582 7274M
96583 7274M
96584 7270M
96585 7270M
96586 7270M
96587 7270M
96588 7270M
96589 7270M
96590 7270M
96591 7270M
96592 7270M
96593 7270M
96594 7270M
96595 7270M
96596 7270M
96597 7268M
96598 7272M
96599 7272M
96600 7268M
96677 7291M
96679 7239M
96684 7291M
96685 7291M
96693 7291M
98445 7291M
98682 7239M
99369 7352M
99370 7352M
99371 7352M
99372 7352M
99373 7352M
99399 7352M
99400 7352M
99401 7352M
99402 7352M
99403 7352M
99507 7291M
99511 7291M
99515 7291M
100361 7291M
100362 7291M
100363 7291M
100364 7291M
100365 7291M
100366 7291M