Personally, my favorite (requires bash and other things that are standard on most Linux distributions)
The details can depend a lot on what the two things output and how you want to merge them ...
Contents of command1 and command2 after each other in the output:
cat <(command1) <(command2) > outputfile
Or if both commands output alternate versions of the same data that you want to see side-by side (I've used this with snmpwalk; numbers on one side and MIB names on the other):
paste <(command1) <(command2) > outputfile
Or if you want to compare the output of two similar commands (say a find on two different directories)
diff <(command1) <(command2) > outputfile
Or if they're ordered outputs of some sort, merge them:
sort -m <(command1) <(command2) > outputfile
Or run both commands at once (could scramble things a bit, though):
cat <(command1 & command2) > outputfile
The <() operator sets up a named pipe (or /dev/fd) for each command, piping the output of that command into the named pipe (or /dev/fd filehandle reference) and passes the name on the commandline. There's an equivalent with >(). You could do: command0 | tee >(command1) >(command2) >(command3) | command4
to simultaneously send the output of one command to 4 other commands, for instance.