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 = 'en' 
  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 = 'en' 
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) 
  AND 1

Query time 0.00063

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost": 0.030083215,
    "nested_loop": [
      {
        "table": {
          "table_name": "cscart_promotions",
          "access_type": "ALL",
          "possible_keys": ["PRIMARY"],
          "loops": 1,
          "rows": 3,
          "cost": 0.0113438,
          "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": "idx_storefront_id",
            "key_length": "4",
            "used_key_parts": ["storefront_id"],
            "loops": 3,
            "rows": 1,
            "cost": 0.018739415,
            "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