So what might be a good solution to this?
Technical solutions have been proposed, but not implemented. See
Scalability. Without them, the Bitcoin network maxes out around 7 transactions per second, and lately traffic has bumped against that limit during busy periods. Scaling up requires cooperation from the big mining pools. Higher fees benefit miners. Whether they want to do more work for less money is a big question.
Some people have suggested using unconfirmed Bitcoins for small transactions, but that's a headache.
Coinbase only buys "confirmed" Bitcoins. Read their blog as to why. It's not so much a rip-off problem as a problem with downstream transactions getting stuck because there's an unconfirmed input.
Coinbase's business is to provide a way for Bitcoin retailers to accept payment without taking a risk on the price of Bitcoins dropping. Bitcoin dropped 25%-30% today, then partially recovered. If you're a goods retailer with a 15% markup, you don't want to be exposed to a big drop like that. So if Coinbase insists on confirmed coins only, that sort of sets the pattern for Bitcoin retail.