By now, everyone knows that Linq-to-SQL does not natively support multiple table inheritance (a.k.a., table-per-subtype) and that you can use other ORM frameworks such as the Entity Framework, NHibernate, etc. instead if you want native support for multiple table inheritance (reference the SO question "Multiple Inheritance in LINQtoSQL" if you have any doubts).

However, supposing that you did want to use (or were limited to use) Linq-to-SQL as your ORM layer, has anyone identified a simple and straight-forward design strategy for simulating multiple table inheritance in Linq-to-SQL projects so that client code can be written against the Linq-to-SQL layer using a natural, object-oriented API?

For queries like "JOIN", I would consider generating my own expression trees, if I really need this, cause this quickly becomes tricky.
The "Left Outer Join" method you see in this example by hajirazin could also be put "protected" in class Person and called with right values from "Customer" and other children.

In conclusion, I think all the work has to be done manually to simulate requests in Objects. Expression trees could do everything but it is difficult to finalize.