R, 71 bytes
\(a,b=rev(a)){for(j in 1:nchar(a)%/%2*2)substr(a,j,j)<-substr(b,j,j);a}
Input and output are each a vector containing two strings.
This works quite simple: the program iterates through the even indices and swaps each \$j^{th}\$ character of two strings. Note that just in a single call of the substr the corresponding characters of both strings get swapped. The modified vector is output after the loop end.
Quite interesting, the program accepts vectors with more than 2 strings too. In this case the characters are swapped in strings pairwise: the 1st string with the last string, the 2nd with the second last etc. In the vectors with the odd number of strings the median (central) string is kept unchanged.
Also unequally long strings will get their characters swapped. In this case the characters' indices are limited by the length of the shortest string.
P.S. this 45 byte version \(s,n=2*nchar(s))substring(s,m<-c(0:n,0:n),m) will produce splitted strings (but I don't consider it to be a valid answer):
[1] "" "W" "e" "r" "l" "d" "," "" "" "" "" "" "" "" "H" "o" "l" "l" "o"
[20] "!" "" "" "" "" "" ""