I think if the fee were called what it really is, an insurance policy, some might change their mind.
Actually when you pay less for using cash you are getting a discount. Legally they can't charge more for using credit cards.
If you went in to the grocery store and bought a candy bar which is listed as $1.00 they can't charge you $1.03 at the register. However, they can charge you $0.97 which is below listed price for using cash. Consider it a cash coupon.