Part of the issue is Canadians themselves. I know a number of business owners who've complained that they offer superior products/services with better prices but Canadian consumers (including B2B) are loyal and don't shop around. This is very different than American customers by comparison. Canadians just prefer comfort at a cost and dislike change.
You can try to promote competition as much as you want but culturally, Canadians aren't very suitable for it. There's 0 reason for Canadians to bank with RBC and pay $10 in banking fees a month when a local credit union will cost them $0 in fees for the same service yet most Canadians have a bank account with RBC. You can't fix stupid.