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 = 350 
WHERE 
  cscart_products_categories.product_id IN (
    458, 2246, 1748, 1454, 475, 477, 478, 
    2370, 2973, 481, 479, 653, 654, 2518, 
    1455, 1301, 2787, 1465, 2788, 1005
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00323

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "39.51"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 30,
            "rows_produced_per_join": 30,
            "filtered": "100.00",
            "index_condition": "(`zdrowy_db`.`cscart_products_categories`.`product_id` in (458,2246,1748,1454,475,477,478,2370,2973,481,479,653,654,2518,1455,1301,2787,1465,2788,1005))",
            "cost_info": {
              "read_cost": "15.51",
              "eval_cost": "3.00",
              "prefix_cost": "18.51",
              "data_read_per_join": "480"
            },
            "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",
              "zdrowy_db.cscart_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 30,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "7.50",
              "eval_cost": "3.00",
              "prefix_cost": "29.01",
              "data_read_per_join": "480"
            },
            "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": [
              "zdrowy_db.cscart_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 1,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "7.50",
              "eval_cost": "0.15",
              "prefix_cost": "39.51",
              "data_read_per_join": "9K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`zdrowy_db`.`cscart_categories`.`storefront_id` in (0,1)) and ((`zdrowy_db`.`cscart_categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`zdrowy_db`.`cscart_categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`zdrowy_db`.`cscart_categories`.`usergroup_ids`))) and (`zdrowy_db`.`cscart_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
458 353M
475 351M
477 351,372M
478 351,372M
479 351M
481 351M
653 351,372M
654 351,372M
1005 352,374M
1301 354M
1454 351M
1455 351M
1465 354M
1748 353M
2246 353M
2370 351M
2518 351M
2787 592M
2788 592M
2973 351M