I'm not following what you are saying. Joining tables without a common key is not a reason to create queries on the fly. As long as two entities have one or more type compatible properties you can join them statically using the join operator.
LINQ is by definition a strongly typed and static language integrated query language. That means you need to know at design time what your query is going to be and what the types are that you are querying. If you don't know that, then you are in the realm of needing to dynamically build queries at runtime. ESQL and LINQ are two different things.
.NET doesn't provide dyanamic LINQ out of the box, so DevForce adds this functionality. I'm not sure what you mean by forbidden to use this. Forbidden to use what?