There is a method to get cheaper 0870 calls. It's a bit "back door" but it works OK.
Get a Three mobile on one of the current offers, such as the one on this site for £2.99/month for 500 minutes. If you route a number of your mobile-to-landline calls through
www.pre-dial.com's Orange access number, these should still be included in your allowance for the month. Pre-dial will then give you points toward more expensive calls.
The rule seems to be that routing 01 or 02 calls through the Orange access no though the day earns 4 points per minute, and an 0870 number costs 4 points per minute, so provided you use the full 500 minutes per month, and make a significant number of landline calls routed through Pre-dial in order to cover the 0870 ones, you'll effectively be getting the 0870 calls for 0.6p per minute (or free depending on the way you look at it).
The downsides are that the £2.99/month only lasts a year (but hopefully something will have been done about 0870 in the meantime) and there are some question marks over 3's reliability. But certainly anyone who finds that they're spending more than £3 per month on 0870 (and 0845 for that matter) numbers should probably take a look at this.
Taking this to extreme measures, you could call your landline from the 3 phone for 8 minutes a day (equalling around 240-250 minutes a month) and just leave it there (using pre-dial to rack up allowance) then use it for 0870 only the rest of the time. This would give you 250 minutes of 0870 calls for £2.99, or 1.2p per minute
There's another little loophole with this. Use pre-dial (on any contract phone with inclusive minutes) to call an 0845 provider to call say the USA. Not only will this give you USA calls on your allowance, but pre-dial seem to give 1 point per minute on 0845 numbers due to their low cost. You can use these points to call 0870 with your allowance as well.