IMHO it's much, much easier to keep all of your opengl calls on one thread and ignore the makeCurrent stuff, as it's horrendously error prone and tends to uncover bugs and quirks in drivers.
You can still do all the heavy lifting (like reading the image off disk and decoding it into RGBA bytes) in a seperate thread, and just keep the texture upload in the gl thread. That's pretty quick anyway, and if you have really big textures you can split them over multiple frames if you need to. This is what I do for texture loading and it doesn't impact the framerate at all.
+1, I do 3D model loading and texture loading on a separate thread and update a variable flag that tracks when they are done. I then force a canvas display update and it checks if that flag is set to then take appropriate action - such as creating 3D objects, binding the textures, etc.