cat doesn't use any significant CPU time (unless maybe on-disk decryption or decompression is involved and accounted to the
cat process which is the one reading from disk) or memory. It just reads the content of the files and writes it to the pipe in small chunks in a loop.
However, here, you don't need it. You can just do:
gzip -c file1 file2 file3 file4 > compress.gz
(not that it will make a significant difference).
You can lower the priority of the
gzip process (wrt CPU scheduling) with the
nice command. Some systems have an
ionice command for the same with I/O.
nice -n 19 ionice -c idle pigz -c file1 file2 file3 file4 > compress.gz
On Linux would run a parallel version of
gzip with as little impact on the system as possible.
compress.gz on a different disk (if using rotational storage) would make it more efficient.
The system may cache that data that
gzip/pigz reads in memory if it has memory available to do so. It does that in case you need that data again. In the process, it may evict other cached data that is more useful. Here, that data likely doesn't need to be available.
dd, you can use
iflag=nocache to advise the system not to cache the data:
for file in file1 file2 file3 file4; do
ionice -c idle dd bs=128k status=none iflag=nocache < "$file"
done | nice pigz > compress.gz