Tharindu,
With just a quick glance at the code, I see one big place to save time.  You evaluate the line integrals but do not simplify them.  I got more than an order of magnitude speedup by simplifying the complicated expressions.  
uPAkxPre[kx_, ky_, M_, phi_, t_, t2_] = 
  I uPConj[kx, ky, M, phi, t, t2].D[uP[kx, ky, M, phi, t, t2], kx] // 
   Simplify;
uPAkyPre[kx_, ky_, M_, phi_, t_, t2_] = 
  I uPConj[kx, ky, M, phi, t, t2].D[uP[kx, ky, M, phi, t, t2], ky] // 
   Simplify;
Doing this one change and adding an accuracy goal on the integrals (to avoid errors when the integrals are zero) 
int12 = NIntegrate[uPAkx[kx, y1], {kx, x1, x2}, AccuracyGoal -> 5];
I get 41 seconds of runtime (on a very fast MacBook Pro EDIT for meshdims = 100).  The next step might be to try different integration options to see if you can optimize the integrals.   I hope this helps.
BTW, I appreciated the nicely commented code -- It makes it much easier to help.
Regards,
Neil