My wait types are constantly ASYNC_NETWORK_IO -- why would this be under these circumstances?
ASYNC_NETWORK_IO means that SQL Server is waiting for the client to pick up data. It could be due to slow network, but more likely the client is slow with processing the data.
I'm not sure why you brought in SSIS here. It sounds like you are copying the data to tables in the same database. In that case, it is probably not a good idea to extract the data to a client.
I would do this with INSERT SELECT, having only the clustered in place, adding non-clustered indexes once data has been copied.
I would also considering inserting the rows in batches to keep down the strain on the transaction log. But it is important that the batches are defined through the clustered index, since you will repeat a scan again and again. How many rows there should be per batch, depends on the size of those LOBs. Look at the total size of the table with sp_spaceused (the reserved
column). Then compute the batch size, so that a batch is 500 MB in size on average. (There is no science behind that number; but I picked something which is not too big, nor too small.)