Até onde eu sei, cmd1 | tee verylong.txt | cmd2 não irá armazenar todo o arquivo na memória. De fato, se cmd2 precisasse esperar muito antes de consumir sua entrada, cmd1 poderia bloquear uma chamada write e desbloquear somente quando cmd2 começasse a ler novamente.
A razão para isso é que há um buffer para o pipe e esse buffer, por padrão, está limitado a um determinado tamanho razoável .
Naturalmente, a história pode ser diferente se cmd2 for sort (ou algo parecido) em que toda a entrada deve ser lida antes que o comando possa gravar sua saída. Nesse caso, todo o conteúdo do arquivo pode ser mantido em cmd2 memory, mas isso é independente se um pipe ou um arquivo intermediário foi usado para a entrada desse comando.