Here is how you can do it with LINQ:
var result =
Names
.Select((item, index) => new {Item = item, Index = index})
.GroupBy(x => x.Index / 500)
.Select(g => string.Join(",", g.Select(x => x.Item)))
.ToList();
First, for each item, you select the item it self along with its index. Then you group these items by index / 500 which means that each 500 items will be grouped together.
Then you use string.Join to join the 500 strings in each group together.