We all know that hourly billing would be better (for non-trivial projects), but it is very hard to have it accepted by the customer.
So you should do a high degree planning and scheduling along with the customer, so he will know that you're not trying to cheat him. You could also try to agree on compensations if the project takes more time that planned in spite of the high quality scheduling (it should be clear at this point the value of a good scheduling, shared with the customer). Don't forget to plan also risk management.
If you do so you chances to have an hourly billing would be higher, but if you really don't want to cheat on the customer on the hours you spend on his project, it would become not much better than per-project billing...