How about changing the comma in the names to something else? Ideally, a character that looks like a comma, but, calibre won't treat as a comma. I'm to lazy to work out the best character, so I've done this with an "@"
Code:
{:'re(list_re(re(author_links(":", " & "),",","@"), " & ", ".*?([^:]+):?$", "\1"),"&",",")'}
That gets pretty close to what I think you want.