Most times when raster processing output is a lot larger than the raster inputs, the cause is different compression settings. Namely, the input rasters used significantly stronger compression than the output (the latter may have used none at all).
A comprehensive answer would either
Use Layer properties / General / Information from provider / Compression on one or more input layers to understand what compression was applied to them. Then when running the processing (in your case, the merge), set Additional creation options COMPRESS, PREDICTOR, and ZLEVEL or JPEG_QUALITY under Advanced Parameters to duplicate it. (You may need to experiment a bit, especially since the last 2 are not necessarily shown in the input info. Time spent learning about compression options from help is time well spent!)
Use gdal_info
in the command line to get info on the input rasters, and then use gdal_translate
to postprocess your merge (or other) output to compress it the same way
A quick'n'dirty answer for Float32 data would be to just try Additional Creation Options of COMPRESS=DEFLATE, PREDICTOR=3 (this is most useful for Float, versus 2 for integers), and ZLEVEL=9. Try it on a subset first since on a 7.4G file it may take a long time.
A second frequent reason is accidentally changing data type. You write the inputs are "16 bit", which sounds like they're integers. In that case, "Float32" as output will already double file size without adding more information, since there are now 32 bits vs 16 for each point (this is before compression).