Many leading banks, insurers and energy companies are making existing customers pay to phone them while offering free numbers to new customers, a watchdog has found.
The majority - 27 out of the 34 companies investigated - offered 0800 numbers for new customers, while just six gave the free numbers to existing customers, said the Which? consumer group.
The companies operating a two-tier system by making existing customers use an 0844 or 0845 number included Churchill, HSBC, NatWest/RBS and Scottish Power, the watchdog said.
And 20 companies made their customers call the often-expensive 0845 numbers to complain about bad service or problems with their bills.
Which? said customers were faced with a "baffling" number of different charges depending on the number they used, with call costs for a typical 20 minute peak-time call from a BT landline ranging from just over 50p to call 0845 to more than £1 to call an 0844 or 0870 number or more than £2 to call an 0871 number.
Costs rocketed when calling from a mobile, with the same typical 20-minute call from an Orange pay monthly phone ranging from £2.50 to £8 depending on the telephone number prefix.
Which? executive director Richard Lloyd said: "It is unbelievable that companies would add insult to injury by charging their customers a premium to make a complaint. It's even worse when they offer new customers access to 0800 numbers while leaving loyal customers to pay more."
Churchill said: "At Churchill our priority is to ensure that all calls are answered as quickly as possible in order to maintain our high levels of customer service."
An HSBC spokesman said: "Our use of differing prefix telephone numbers enables us to ensure we offer an effective, flexible and resilient service for the tens of millions of customer calls we receive each month."
A ScottishPower spokesman said: "As part of our commitment to provide clear and transparent price comparisons, we have always had a free phone number for customers wishing to discuss ScottishPower tariffs."