If you have the surface normal from the triangle, and the location to put the bullet hole, then you can simply construct the four vertices needed for your billboard. The surface normal is always perpendicular to the triangle face, so you just need to find any vector that is 90 degrees away from the normal. Once you have that vector, you can then use it to offset into the four directions around the hit point and place vertices in each corner.

Finding that first vector can be accomplished a number of ways. You can literally rotate the normal vector, or you can assume an up direction (i.e. [0,1,0]) and take the cross product of the normal and the up vector to find another vector that is perpendicular to both of the input vectors.

I notice that the triangles are only valid when the mesh position is XYZ: (0.0f, 0.0f, 0.0f) but when the mesh move to any other position, the results assume that the position is still 0.0f, 0.0f, 0.0f.

When you click on an object you want billboard to be attached to it, right? Then you need to transform your billboard with that objects transformation matrix, usually you set this up just before you draw your billboard:

That should attach the billboard to the model, the problem is now with the intersected triangle...

It would be a lot easier to help you if you could attach your whole project for us to examine?

Then you might want to consider different approach like instancing (if you want 1 draw call), but you'll then need to learn how to use shaders (as i know instancing is not possible in "fixed function pipeline"). You could store in vertex declaration quaternion (float4) for rotation and position + uniform scale scalar(float4) to build a transfom matrix in vertex shader. Then you just lock->write-unlock for "billboards" that is attached to objects that might move in the scene. With this approach you might want to consider to specialize 2 classes, one for static (no need to lock->write->unlock) and other for dynamic objects.