Only a small addendum to the given answer:
It's always wise to translate raster data into compressed TIF format (GeoTiff Compression for Dummies - Paul Ramsey).
In your case, I don't know your data (*.img could be HFA-ERDAS Imagine files or ArcGIS DEM - USGS Land Cover? - files) but guess it's single band DEM raster data.
If I'm right, you should compress the resulting TIF with the lossless DEFLATE compression method.
Here is the command line call on Windows (OSGeo4W Shell), but shouldn't be so different in Linux:
for %i in (*.img) do
gdal_translate --config GDAL_CACHEMAX 1024 -co NUM_THREADS=ALL_CPUS -co COMPRESS=DEFLATE -co ZLEVEL=9 -co PREDICTOR=2 -co TILED=YES %i %~ni.tif
Then you can create the virtual mosaic (*.VRT) as already suggested:
gdalbuildvrt mosaic.vrt *.tif
After you successfully built your mosaic, you have to decide what you will do next:
1) building a hillshade or relief using gdaldem (https://gdal.org/programs/gdaldem.html) and attaching some overviews to the resulting TIF:
gdaladdo --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR --config GDAL_TIFF_INTERNAL_MASK YES -r cubicspline hillshade.tif 2 4 8 16
2) Loading the *.VRT into QGIS and dynamically building hillshades via styling:
A small hint here: i'ts not possible to call the layer properties from such a big file inside QGIS, but you could load a small DEM file first, set your preferred styling, set the visibility scale and change the datasource to your *.vrt afterwards using the wonderful "changeDataSource" plugin (right click on your layer to open the changeDataSource dialog).
3) Loading the *.VRT following the hint in 2) and dynamically creating cross-sections: that's another story where you find the answer here: Profile Tool has too high resource consumption: Alternative or work around?