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 = 7148 
WHERE 
  cscart_products_categories.product_id IN (
    96490, 96491, 96492, 96493, 96494, 96495, 
    96496, 96497, 96498, 96499, 96500, 
    96501, 96502, 96503, 96504, 96505, 
    96506, 96507, 96509, 96510, 96511, 
    96512, 96513, 96514, 96515, 96516, 
    96517, 96518, 96519, 96520
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00146

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "25.81"
    },
    "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": 45,
            "rows_produced_per_join": 45,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "4.78",
              "eval_cost": "4.50",
              "prefix_cost": "9.28",
              "data_read_per_join": "720"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`nuie_scalesta_net`.`cscart_products_categories`.`product_id` in (96490,96491,96492,96493,96494,96495,96496,96497,96498,96499,96500,96501,96502,96503,96504,96505,96506,96507,96509,96510,96511,96512,96513,96514,96515,96516,96517,96518,96519,96520))"
          }
        },
        {
          "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": "11.25",
              "eval_cost": "0.23",
              "prefix_cost": "25.03",
              "data_read_per_join": "5K"
            },
            "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')))"
          }
        },
        {
          "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": 2,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "0.56",
              "eval_cost": "0.23",
              "prefix_cost": "25.81",
              "data_read_per_join": "36"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
96490 7263M
96491 7263M
96492 7263M
96493 7263M
96494 7265,7247M
96495 7265,7247M
96496 7265,7247M
96497 7265,7247M
96498 7265,7247M
96499 7265,7247M
96500 7265,7247M
96501 7265,7247M
96502 7265,7247M
96503 7265,7247M
96504 7265,7247M
96505 7265,7247M
96506 7265,7247M
96507 7265,7247M
96509 7265,7247M
96510 7194M
96511 7194M
96512 7194M
96513 7194M
96514 7194M
96515 7194M
96516 7194M
96517 7194M
96518 7194M
96519 7194M
96520 7194M