Data is sent 1 packet at a time, yes at the high level. It isn't written into memory 256 bytes at a time though. The bus isn't that wide.
I think something isn't clear here, so let me try to clarify:
If we are sending multiple packets, we need a way to know the last packet was officially received (ie - a way to inform the core that all data is there when a buffer has been filled). We also need a way to ensure the very last byte is in memory.
Without a signal / interrupt, the core has to simply poll the buffer for something - which isn't very efficient.
Using the interrupt generation via VIRQ write does not decrease throughput of your transaction..
It is Freescale's suggestions for doing multiple NWRITEs and wanting absolute evidence of completion of a set of transactions.
NWRITE_R does decrease throughput, but just informing of all available options.