Another option would be to look into travel insurance that pays out in the event of work-related cancellation. I've seen these in The Netherlands though I don't know about blighty.
Your conditions seem morally reprehensible. Cancelling leave at 48hrs notice is a sign of poor management. The risk should be born by the company, not the employee.
My employer (oil company) can cancel leave, or order people home early, but it doesn't happen often and they'll always re-imburse losses and additional costs. Give 'em their due, it's a fair system, e.g. if you get sick on holiday, you can claim back the leave days.