The best way to reduce the bank's take is to use credit cards, you might get it down to 3% that way. If you withdraw using an ATM and pay cash you might pay the bank 6% (depending on how much you withdraw). Travelex give a sort of decent rate of exchange on cash ordered over the internet, but you have to pay by plastic, and so you get hit with a credit card fee so the savings disappear. Nationwide used to be the best of a bad bunch, but not looked at it recently.
You can tell the bank's take after the event by putting your transaction details into
http://www.xe.com/ccc/. That compares what you got to the interbank rate on the day, and it's quite sickening to see what the bank takes.
I noticed today that if you book a US hotel on a UK website, and pay in GBP using a UK credit card you will get a pretty good rate, close to interbank.
You should never take up the merchant's offer to have the foreign charge made in your home currency, that's a good way to get ripped off. Best way is to have USD, GBP and EUR accounts, but you can see your money disappear when currencies take a dump like the USD just has.