You can try making your tasks Asynchronous on your server side code(http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx and http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45 are good things to look at). In short, this will let you fire off a bunch of tasks all at once, but not load the page until complete. Currently your code is firing off a task.. waiting.. completing.. then moving to the next (1, then 2, then 3, then 4, then 5). ASync let's you say (1,2,3,4,5 GO... wait for all).
If you want some UI improvements instead to showcase where you are in the process.. you may be better suited to having a basic web front end, and some WCF services in the background that kick off the processes, of which your front end UI can periodically poll and show an updated progress.. jQuery can make this trivial to do.. setting up your back end services would be the hard work.
All that being said, I used to write stuff like this with ASP.NET years ago, and found that over time, ASP.NET isn't really suited for long running operations like this. It's not that you can't do it.. you obviously can of course, but IIS is build for quick in\quick out HTTP Requests and Responses. A long running operation like this chews up available connections and eats up server memory. If you have the option, I recommend you put these operations in.. at the very least.. some service layer. If you don't need a UI at all to showcase this stuff.. use a console project. It's 95% the same code, but the server manages starting and completing it much better than a long running ASP.NET web page.
Hope this helps!