Basically, there is no really efficient way to handle very deep table-per-subclass mappings in ORM. So we say try to avoid such deep inheritance hierarchies.
However, in Hibernate3, you can use a trick:
http://blog.hibernate.org/cgi-bin/blosxom.cgi/2004/08/25#join to handle your case (perhaps) more efficiently. There are tradeoffs between this approach and the <joined-subclass> approach. Usually <joined-subclass> is better, since it is less vulnerable to N+1 selects problems.