If you are concerned about the amount of memory the application is using, why don't you measure that instead of the list? You can compare the process memory to the available memory to avoid paging. This is really just an approximation (another thread could be eating memory) but it may be good enough? The advantage is that your memory limit automatically increases on new hardware or decreases if other processes are eating up memory (let's say SQL is running on the same machine).
Depending on your app, i would consider sorting in memory and flushing partitions to disk (then build another partition in memory and repeat). Then you can just merge the partitions once your are ready instead of worrying about a disk based sort.