AFAIK, The key difference is session is per user, while cache will be for application scoped items.
As noted in the other answers you can store per user info in the cache, providing you provide a key (either by session or cookie). Then you'd have more control to expire items in the cache and also set dependencies on them. So if the DataTable in question is going to change on a regular basis, then caching is probably an appropriate option. Otherwise, if it is static session might be more appropriate. Steven Smith has an excellent video on caching at dnrtv that is worth checking out.
It really depends on what you're trying to achieve, how much time you've got. There are some other alternatives to consider with respect to how you store state in an application.
Depending on how large the table is, you could consider storing the state in a cookie (encrypted if it is sensitive information). Alternatively, if it's application scoped data you cold use a static field on a page or class. There is the Application object as well.
Update: I think the key question you have to ask yourself, is who should see this data. Are they going to access the data frequently? (No, don't bother). Is it going to change? (No, use a static field or Application). Is it acceptable for user a and user b to see the same results? (No, use the cache with a key comprising of the username and the search term.). (Yes, use the cache using a key of the search term).
Honestly though, if you're not far along in your development, I would consider parking the caching/state issue to a later date - you might not even need it. The first three rules of performance tuning are: 1. Measure, 2. Measure some more. 3. Measure again...