You should be using proper try/catch error handling whenever executing a functional block of code that you expect might except (as in this case whenever you execute a lamba expression and/or LINQ query against your EF data context). The real problem is why are you receiving timeouts.
I'd like to respectfully point out one potential fallicy with your above statement that may provide some help in diagnosing and fixing your timeouts. "...you don't have to worry about when the data is actually queried from the database." I would suggest that in the course of constructing a nominally complex LINQ query, you actually do need to be quite aware of when the database is going to get hit. You are going to want to keep your LINQ queries as IQueryable for as long as possible before materalizing them via a call to ToList(), Distinct(), Count(), etc.
So let's say that you're querying a million-row table and you are parsing through potential criterion, you should wait until the very end to materialize the query with ToList() as this is the point at which the SQL statement generated by EF will be executed on the db:
using(var context = CreateEFContextFactory())
{
var x = (from d in context.MyBigTable select d);
if(!string.IsNullOrWhitespace(stringParam1))
x = (from d in x where x.Field1 == stringParam1 select d);
if(intParam2 > 0)
x = (from d in x where x.Field2 == intParam2 select d);
var listOfMyBigTableObjects = x.Distinct().ToList(); //point of sql execution
}