while read a; do echo "FIFO1: $a"; done < /tmp/fifo1 & exec 7> /tmp/fifo1
is indeed equivalent to
while read a; do echo "FIFO1: $a"; done < /tmp/fifo1 &
exec 7> /tmp/fifo1
`&` acts as a command separator, as well as placing the command preceding it in the background.
Strictly speaking, it acts as a separator for items in a list of commands:
> A `list` is a sequence of one or more pipelines separated by one of the operators ‘`;`’, ‘`&`’, ‘`&&`’, or ‘`||`’, and optionally terminated by one of ‘`;`’, ‘`&`’, or a `newline`.