Using word2vec is fine.
I’m a bit doubtful about your argument of “no inherent meaning”. Embeddings are trained together with RNN. So they should adapt to have some sort of meaning. Are you saying that your word-level model (with embedding) gives similar performance with char-level model? Perhaps try increasing embedding dimension or hidden size? Using larger amount of training data can also probably help.