The main use of non-geographical numbers is so the company concerned can direct your call to the cheapest call centre, err, I mean the next available representative... With distributed phone systems, a geographical number might not even be relevant or remotely correct.... e.g. I have an 01268 VOIP number. If you look up that code you'll find it's Southend-on-Sea & environs, in fact it rings a phone in Birkenhead....
What p**ses me off, even more than the 0845/0870/0800 thing (all chargeable on most mobiles) is this new "personal number" scam. Until recently, all mobiles have been 07xxxxx numbers; but now, personal numbers are "070". and they cost getting on for £1/minute. I bought a part for my car recently & the garage number was 070. I thought it was a mobile. The 8 minute call added £5.11 (ex VAT) to my phone bill.
In the words of The Shamen - Naughty naughty, very naughty.
saynoto0870.com is a brilliant website, I use it all the time.
Must admit, I think OfCom are largely to blame here, with their ridiculous assigning of cost codes. I think they deliberately make it confusing to allow unscrupulous companies rip-off unsuspecting punters.