The problem is a fundamental incongruence between the costs to ISP's, and the corresponding costs to customers. It's not just consumer ISP's that are guilty of this racket, either. Most "cloud" hosts, Amazon included, are making huge margins by charging their customers for total data transferred, but only paying upstream for
rate of transfer, i.e. bandwidth capacity at any given time.
To simplify, let's ignore last mile costs and at ISP's who own their own infrastructure. Let's also ignore peering. ISP's, and hosts like Amazon, pay for IP transit on a capacity basis, i.e. data per second, e.g. "$1 per month per mbps." They buy this IP transit from providers like Level3, Cogent, Hurricane Electric, etc. What this actually means is that they pay a monthly fee for some amount of fiber optic cables to plug into their servers/switches. These cables have a set bandwidth capacity, like 1gbps.
They could charge their customers in the same way, E.g. "$2 per month per mbps," and make up to 2x on each customer, but this would quickly become unsustainable because there simply is not enough cable in the world to do that, and make customers will not be using their full capacity 99% of the time anyway. Instead, the companies "oversell" their capacity by advertising a certain capacity to customers, but then capping the total transfer so that the customers cannot operate at peak capacity 100% of the time, since there is not space for that many electrons on the fiber optic cables.
Amazon charges $0.1 per gb transferred. In bulk, IP transit from hurricane electric can cost as little as $0.50 per mbps.
If you operate a low bandwidth site on Amazon, and you transfer 1 mbps for an entire month, that totals to 155.52 gigabits, or 19 gigabytes. You pay $1.90, but Amazon only pays $0.50. If you transfer at a consistent rate of 1 gbps, you total 324 terabytes of transfer, which costs you $3,240 @ 0.01/gb (I think that's their bulk price?). Amazon, meanwhile, only pays $500.
Lots of people don't know this is how the hosting industry works, and Amazon is gouging the shit out of them on price.
Lots of companies paying for the convenience of "the cloud" are getting ripped off. For high bandwidth sites, it's far more cost effective to colocate at a datacenter and buy the IP transit yourself.
I'm sure Amazon offers custom transit pricing to big customers, but you need to transfer a ton of bandwidth to get that, and by then you're already getting ripped off anyway.