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.00125

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 7241,7309,7346,7208M
87882 7241,7309,7346,7208M
87904 7262,7256M
87905 7262,7256M
87936 7258M
87938 7320,7260M
87941 7320,7260M
87987 7345,7347,7259M
87988 7320,7260M
87997 7345,7347,7259M
88026 7345,7347,7259M
88035 7210,7257,7260M 0
88036 7262,7256M
88044 7258M
88045 7345,7347,7259M
88047 7345,7347,7259M
88049 7258M
88078 7349,7261M
88083 7320,7260M
88506 7241,7309,7346,7208M
88507 7241,7309,7346,7208M
88510 7241,7309,7346,7208M
88511 7241,7309,7346,7208M
88514 7241,7309,7346,7208M
88515 7241,7309,7346,7208M
88517 7241,7309,7346,7208M
88518 7241,7309,7346,7208M
90325 7265,7247M
90827 7241,7309,7346,7208M
90828 7241,7309,7346,7208M