Often worth looking for 'split fares'- i.e. you buy two tickets for your journey, the first being to an intermediate station where your train calls that is at the boundary of two different operators' fares, the second being from there to your destination. e.g. Bristol to Birmingham trains usually stop at Cheltenham; fares between Bristol and Cheltenham are set by First Great Western, but fares between Cheltenham and Birmingham are set by Cross Country, and often cost more than the total of the two different stages combined. Similarly, Banbury provides another useful breakpoint on the vastly overpriced Cross Country network. You can save a huge sum for journeys between say Reading or Didcot and Birmingham at peak time by splitting fares at Banbury. This website:
http://www.splitfare.co.uk/
was set up to help people find these sorts of savings, but it got stopped by ATOC apparently because the website was using the national fares data without permission. But it looks like they are trying to find another way of doing it.