You just described scatter/gather IO,
https://en.wikipedia.org/wiki/Vectored_I/O for the obligatory pedia link.
The downside is that for hardware that doesn't support it directly, the kernel still has to memcpy things around, and for hardware that can, there's more buffer mapping involved.
The upside can be easier shuffling around on the application side, and sometimes the ability to reuse chunks that get shared across multiple IO operations, depending on the alignment and size restrictions. A particularly granular one could possibly reuse a lot of boilerplate packet header data, especially if there's hardware support for adjusting checksums and/or sequence values.