There is a way around it, to write on the fly you can use the '-' stdin/stdout as the filename on tar.
Code:
tar -cvzf - /project | dd bs=16k of=/dev/st0
and similar to test.
Code:
dd bs=16k if=/dev/st0 | tar -tvzf -
Whether this would be faster or not would probably depend on the specifics of your tape device, and how the linux driver interacts with it. I've certainly used the above approach on commercial UNIXs before to good effect but I've no experience with tape on linux.
If your tape drive does it's own hardware compression, then you might be better off not using the -z tar option. It'll just use up cpu time for no gain (in some cases, compressing compressed data can actually make the data larger).
You could always do a couple of benchmarks on a subset of your data, trying a few different blocksizes/compression options and come back and let us know if it has an effect.
