In most businesses, the answer would be easy - move to value/results based pricing. This is a little more interesting in the programming world because it is often hard to determine what the time will be to add a particular level of value, and clients often want to make changes that won't increase the value of the deliverable (and may even decrease it) but that will still burn your time and affect your costs.
Many programmers are moving towards Agile development methodologies. After trying a number of XP engineering practices and Agile project management approaches - from SCRUM to Lean I tend to think that agile is the most efficient way of adding business value to clients. However it isn't necessarily the best way to build a profitable consulting business because you're limited to charging by the hour.
We have an interesting hybrid model where our software product line allows us to generate an application very quickly and we deliver those apps for a fixed bid but then charge on an hourly basis for any tweaks the clients want (we also outsource the graphic design and the tweaking of the layouts when we can as those are the areas that can burn the most time in inconsequential changes).
It works quite well as we don't really want to work on an hourly basis so we do our best to keep the tweaking to a minimum and the client has control over how much the project costs. We guarantee to deliver something that meets the spec for a fixed bid so they don't have to worry about how long it'll take us to code a newsletter system or a custom content management system, but they have to pay by the hour for the tweaking at the end of the project so we don't lose money on picky clients - they just pay for more hours at the end in the tweaking phase.
What do other people do to get beyond just making an hourly rate (especially in a world where open source is replacing licensed software in many situations)?