My old Laptop with HDD is about twice as fast as your timings.
I suspect you may be running the cat from BusyBox, not the optimised stand-alone cat.
I checked timings in four commands, and they all came out in the same ball-park (within 10%). I used GNU cat, sed, awk and dd. I cleared caches before each test (in another window as sudo) with:
echo 3 > /proc/sys/vm/drop_caches
.
sed does (incidentally) process multiple input files.
$ time cat Timer1 Timer2 > Timer3
real 1m57.536s
user 0m0.072s
sys 0m20.456s
$
$ time sed -e '1n' Timer1 Timer2 > Timer3
real 1m54.450s
user 0m15.924s
sys 0m23.420s
$
$ time awk 1 Timer1 Timer2 > Timer3
real 2m0.080s
user 0m21.752s
sys 0m21.444s
$
$ time { cat Timer1 > Timer3
> dd status=none conv=notrunc oflag=append bs=100M if=Timer2 of=Timer3
> }
$
real 2m9.426s
user 0m0.012s
sys 0m18.260s
$
$ ls -lh Timer?
-rw-r--r-- 1 paul paul 17 Mar 7 11:01 Timer1
-rw-r--r-- 1 paul paul 3.7G Mar 7 11:03 Timer2
-rw-r--r-- 1 paul paul 3.7G Mar 7 11:50 Timer3
$
$ ls -l Timer?
-rw-r--r-- 1 paul paul 17 Mar 7 11:01 Timer1
-rw-r--r-- 1 paul paul 3942530050 Mar 7 11:03 Timer2
-rw-r--r-- 1 paul paul 3942530067 Mar 7 12:06 Timer3
This suggests the timings are dominated by the I/O performance, and the command used is much less signicicant. (Using a shell read loop would still not be a great idea.)
Notably, though, cat and dd use far less user time than the edit tools.