Avoiding to implement them as an expression node seems not straightforward at all. The queryable composition and execution just pass along the expression, not the queryable. Unless we construct a map of expressions to options on the query provider, we can only set them as an expression node.
The map solution would be a brittle implementation in my opinion. So I think that instead of getting rid of all options expression nodes, we should instead consolidate them in a single expression node able of expressing them all.
Currently, Linq query options such as cacheable and timeout are implemented as additional Linq nodes on the query expression.
They should not. Moreover, a queryable extension is defined for each option. A single one allowing to define all options should be preferred.
This subject has spawn from this PR comment.