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 = 287 
WHERE 
  cscart_products_categories.product_id IN (
    428274, 411586, 428067, 405254, 442920, 
    416803, 433221, 427872, 419871, 439094, 
    415819, 415673, 408268, 435233, 411645, 
    446751, 460445, 454691, 405290, 432307, 
    456571, 446699, 413014, 450688
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00054

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost": 0.122587763,
    "nested_loop": [
      {
        "table": {
          "table_name": "cscart_products_categories",
          "access_type": "range",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "pt",
          "key_length": "3",
          "used_key_parts": ["product_id"],
          "loops": 1,
          "rows": 24,
          "cost": 0.04381364,
          "filtered": 100,
          "attached_condition": "cscart_products_categories.product_id in (428274,411586,428067,405254,442920,416803,433221,427872,419871,439094,415819,415673,408268,435233,411645,446751,460445,454691,405290,432307,456571,446699,413014,450688)",
          "using_index": true
        }
      },
      {
        "table": {
          "table_name": "cscart_categories",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "c_status", "p_category_id"],
          "key": "PRIMARY",
          "key_length": "3",
          "used_key_parts": ["category_id"],
          "ref": ["u985510652_ecartify.cscart_products_categories.category_id"],
          "loops": 24,
          "rows": 1,
          "cost": 0.02228576,
          "filtered": 100,
          "attached_condition": "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')"
        }
      },
      {
        "table": {
          "table_name": "product_position_source",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "PRIMARY",
          "key_length": "6",
          "used_key_parts": ["category_id", "product_id"],
          "ref": [
            "const",
            "u985510652_ecartify.cscart_products_categories.product_id"
          ],
          "loops": 24,
          "rows": 1,
          "cost": 0.04112736,
          "filtered": 100
        }
      }
    ]
  }
}

Result

product_id category_ids position
405254 289M
405290 305M
408268 305M
411586 289M
411645 305M
413014 305M
415673 305M
415819 289M
416803 289M
419871 289M
427872 305M
428067 305M
428274 289M
432307 305M
433221 305M
435233 289M
439094 305M
442920 305M
446699 305M
446751 289M
450688 305M
454691 305M
456571 289M
460445 289M