Expression tree can be your option here
yes
Yes
It is not Possible Because of first compiler check and gives an error
Dynamic LINQ Queries with Expression Trees can be used
Dynamic LINQ library can be used to achieve this.
By default its not possible in LINQ, You need you to write your own logic of few hundred lines to achieve this. By doing so it would be possible to possible to pick a column at runtime, also possible to decide filter at runtime. Expression Tree classes can help you achieve this.