son cosas DIFERENTES, no hay una forma mejor que la otra, todo depende lo que quieras lograr.
opacity trabaja la opacidad de todo el elemento (junto con sus hijos y nodos)
usar
rgba en el background te permite usar
colores rgba (eso es:rojo, verde, azul, canal alfa)
para lo que quieres, usa RGBA.
PD: rgba funciona a partir de IE9, IE8 y anteriores no lo soportan.