Ethernet is fundamentally designed around a loop-free topology. This combined with the rule that a hub or switch never sends data back the way it came, means that each frame will be delivered to each node at most once.
Spanning tree was introduced to allow a degree of fault-tolerance in an Ethernet network, it is as you have noticed inefficient. Especially as networks get larger.
However, in local area networks efficient use of links is often not the most important criteria, simplicity and availability of low-cost switching hardware is often more important.
If you need to deliver services efficiently over a wide area, then one of the most obvious approaches is to simply not run a large scale Ethernet network, but instead run a bunch of small ones connected by IP routing.
If you really need L2 Ethernet end to end over a wide area with high bandwidth and reliability then there are certainly technologies (for example VXLAN BGP EVPN) that aim at delivering that service, generally by encapsulating the Ethernet traffic and delivering it over a network (for example an IP network) that does support non-tree toplogies, but expect to pay more money both for the equipment to deliver the service and the people to set it up.