Another potential method is to store the sprite info in a buffer resources, and then use an SRV in the vertex shader to grab the data out of it. The interesting thing that you can do, is to create the vertices completely in the vertex shader, with no vertex buffers required at all! The general idea is to use your draw call to specify how many vertices are generated, and then use the SV_VertexID semantic value to grab the appropriate data from the SRV. You would use 4 vertex shader invocations for each of the quads, and the method is relatively efficient. If you check out the particle storm demo from Hieroglyph 3, there is an example of creating vertices without vertex buffers (although I expand the vertices in the GS as mentioned above).
Regarding the use of instancing, you are probably not going to see an improvement for the use of 4 vertices as your instanced geometry. In general, unless you are using geometry with 100 or more vertices you won't see much improvement (at least that is general advice, but your particular situation may or may not reflect the general rule of thumb...).