What calculations do you need to do ? Most if not all the calculations should be done ahead of time, in most cases loading extra memory is faster than doing the calculation needed to generate it at run time. Precompiling the data is also a lot simpler than creating unnecessary threading in your program.
There is a way to load textures into a separate context in another thread and then share those resources with another context. Not sure of the exact details but i think that's how it works in OpenGL. I don't think this functionality was implemented in OpenGL 2.0 or earlier, i think that was the only downside to it.
I don't know what other people on here would say, but I would suggest 3.3 for now, simply due to compatibility reasons. Lower end graphics cards are highly unlikely to be able to support the extensions required by OpenGL 4.x. However4.x wouldn't go astray (assuming your graphics card can actually handle it to test), simply because as technology progresses 4.x will be the way to go (presumably).