I don't think the matrix alternative is the slowest part of your profile, but you can save a little time by optimizing the rest. For instance:
x <- matrix(rbind(c(1-a,a), c(b, 1-b)), 2*n, 2*n, byrow=TRUE)
In addition, although I would not recommend it, you can save extra time by using the internal matrix function:
x <- .Internal(matrix(rbind(c(1-a,a), c(b, 1-b)), n*2, n*2, TRUE, NULL, FALSE, FALSE))
Here are a few steps:
benchmark( method0 = matrix(rep(as.vector(rbind(c(1-a,a), c(b, 1-b))), n), ncol=n*2, byrow=TRUE), method1 = matrix(rbind(c(1-a,a), c(b, 1-b)), 2*n, 2*n, byrow=TRUE), method2 = .Internal(matrix(rbind(c(1-a,a), c(b, 1-b)), n*2, n*2, TRUE, NULL, FALSE, FALSE)), replications = 100000, order = "relative")