You can rbind them, then coerce back to a vector.
a <- c("a1", "a2", "a3")
b <- c("b1", "b2", "b3")
c(rbind(a,b))
# [1] "a1" "b1" "a2" "b2" "a3" "b3"
As @Moody_Mudskipper points out, as.vector(rbind(a,b))) is faster
For the case when the lengths are different, I found the following solution from Rolf Turner at this link: http://r.789695.n4.nabble.com/Interleaving-elements-of-two-vectors-td795123.html
riffle <- function (a,b) {
n <- min(length(a),length(b))
p1 <- as.vector(rbind(a[1:n],b[1:n]))
p2 <- c(a[-(1:n)],b[-(1:n)])
c(p1,p2)
}
riffle(1:3, letters[1:5])
# [1] "1" "a" "2" "b" "3" "c" "d" "e"