SELECT 
  COUNT(*) 
FROM 
  cscart_promotions 
  LEFT JOIN cscart_promotion_descriptions ON cscart_promotion_descriptions.promotion_id = cscart_promotions.promotion_id 
  AND cscart_promotion_descriptions.lang_code = 'ru' 
  LEFT JOIN cscart_storefronts_promotions AS storefronts_promotions ON storefronts_promotions.promotion_id = cscart_promotions.promotion_id 
  LEFT JOIN cscart_promotion_images ON cscart_promotion_images.promotion_id = cscart_promotions.promotion_id 
  AND cscart_promotion_images.lang_code = 'ru' 
WHERE 
  1 
  AND status IN ('A') 
  AND (
    storefronts_promotions.storefront_id = 1 
    OR storefronts_promotions.storefront_id IS NULL
  ) 
  AND cscart_promotions.promotion_id NOT IN (25, 26, 27)

Query time 0.00038

JSON explain

{
  "query_block": {
    "select_id": 1,
    "table": {
      "table_name": "cscart_promotions",
      "access_type": "ALL",
      "possible_keys": ["PRIMARY"],
      "rows": 10,
      "filtered": 100,
      "attached_condition": "cscart_promotions.`status` = 'A' and cscart_promotions.promotion_id not in (25,26,27)"
    },
    "block-nl-join": {
      "table": {
        "table_name": "storefronts_promotions",
        "access_type": "index",
        "key": "PRIMARY",
        "key_length": "8",
        "used_key_parts": ["storefront_id", "promotion_id"],
        "rows": 19,
        "filtered": 100,
        "using_index": true
      },
      "buffer_type": "flat",
      "buffer_size": "108",
      "join_type": "BNL",
      "attached_condition": "trigcond(storefronts_promotions.storefront_id = 1 or storefronts_promotions.storefront_id is null) and trigcond(storefronts_promotions.promotion_id = cscart_promotions.promotion_id)"
    }
  }
}

Result

COUNT(*)
1