Hey,
If you have a lot of data, applying a filter at the database (only selecting the exact number of records you need) or in your database query is a good idea. For instance, if you have 3 million records, and you only show 50 records at a time, only loading the 50 records you need, and using the LINQ .Skip().Take() methods to page is a good idea. If you decide to use stored procs, that's viable too, and SP's work in LINQ and DataTable's.
Filters maybe harder to apply outside of the database; this can be made easy in data tables or LINQ. It depends how easy or hard it will take the effort to apply filters, whether they could be easily applied in the DB query, or if you need to apply filters in your code-behind by loading all the data and looping through.
Whether you go DataTables or LINQ, either is a viable approach. LINQ is the newer technology and here to stay; DataSets will be around for a while, but don't expect any new dataset features because ADO.NET Entity Framework is the new dataset.
Hope this makes any sense.