Using in-proc or out-proc cache is purely application dependent.
Inproc cache stores data in current application’s process memory which makes cached data access very fast however cached data is accessible only to the local application. This works fine if you have only one application server or if every application server is using a different data set. Even so, if the application server goes down, the cached data will be lost.
However if your multiple application server using same set of data, Inproc cache is not the best solution. Since, in that case, every application would be loading the same data set hence limiting the usefulness of using cache.
Moreover, for session state caching, it will leave you with the only option of using sticky-sessions which, in turn, would limit load balancing.
On the other hand, distributed caching will add an extra network cost of getting data from another server, but it would give you an advantage of sharing the same data set with all other applications. Not only that but also, the data would remain cached even if the application server goes down.
You can also use a hybrid solution of both Inproc and OutProc caching, like one provided by NCache, where you can have a distributed clustered cache (containing all cached data) and a local inproc cache (containing subset of data, frequently used by that application server). This will give you advantages of both caching techniques.
Since you are re-writing your application, I will recommend you to try NCache. It provides both in-proc and out-proc solutions. You can write your application only once, test it with both solutions and go with the one which suits you best.