How can I merge outputs of two separate layers so that the overall performance improves?
I'm not sure it's possible to help much because this is an experimental question. I'm afraid the only answer comes with testing many different options. 

I see a little thing that might be making your model a little worse, though:


You're concatenating "relu" with "sigmoid". 


Placing two different nature values in the same array may make it more difficult for updating weights properly.

A few independent suggestions:


Make the output of the images model have "relu" activation as well before the concatenation. Preferrably, use a batch normalization before the image relu and before the number relu (this way you concatenate values that are in very similar ranges).    
Instead of concatenating, you can try Multiply()([img_output, numeric_output]), in this case, both outputs must have the same size, one of them uses "relu" or "linear", and the other uses "sigmoid".   




Now, something important when using AUC: you need big batch sizes, because AUC is dependent on the whole data, it's not like usual metrics/losses that you can take the mean from the results of each batch.