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 = 7257 
WHERE 
  cscart_products_categories.product_id IN (
    87905, 88045, 88049, 87936, 88515, 88518, 
    88078, 88514, 88517, 88511, 88083, 
    87904, 90325, 87876, 88506, 88507, 
    88510, 88035, 88044, 87987, 90828, 
    90827, 87938, 87941, 87997, 88026, 
    87882, 87988, 88036, 88047
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00651

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "78.59"
    },
    "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": 87,
            "rows_produced_per_join": 87,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "8.99",
              "eval_cost": "8.70",
              "prefix_cost": "17.69",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`nuie_scalesta_net`.`cscart_products_categories`.`product_id` in (87905,88045,88049,87936,88515,88518,88078,88514,88517,88511,88083,87904,90325,87876,88506,88507,88510,88035,88044,87987,90828,90827,87938,87941,87997,88026,87882,87988,88036,88047))"
          }
        },
        {
          "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": 87,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "21.75",
              "eval_cost": "8.70",
              "prefix_cost": "48.14",
              "data_read_per_join": "1K"
            },
            "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": 4,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "21.75",
              "eval_cost": "0.44",
              "prefix_cost": "78.59",
              "data_read_per_join": "11K"
            },
            "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
87876 7309,7208M,7241,7346
87882 7208M,7309,7241,7346
87904 7256M,7262
87905 7256M,7262
87936 7258M
87938 7260M,7320
87941 7260M,7320
87987 7347,7259M,7345
87988 7260M,7320
87997 7347,7259M,7345
88026 7259M,7345,7347
88035 7260M,7210,7257 0
88036 7262,7256M
88044 7258M
88045 7347,7259M,7345
88047 7259M,7347,7345
88049 7258M
88078 7261M,7349
88083 7260M,7320
88506 7208M,7346,7241,7309
88507 7241,7208M,7346,7309
88510 7346,7309,7241,7208M
88511 7346,7241,7208M,7309
88514 7208M,7241,7309,7346
88515 7241,7309,7208M,7346
88517 7309,7241,7346,7208M
88518 7346,7208M,7241,7309
90325 7265,7247M
90827 7241,7208M,7346,7309
90828 7208M,7346,7309,7241