With MoreLINQ Batch (or any other batch implementation):
var abc = names.Batch(500).Select(x => String.Join(",", x)).ToList();
NOTE: Grouping operator is not streaming operator (as well as ToList). That means that all 700k strings should be enumerated and keys should be calculated for each item, and each items should be stored in internal groups. And that will cost some time and resources. Batching is streaming and it does not store all items internally. It stores only current batch. So with batching if you will not convert results to list, you can process batches one by one faster and save some memory.