I about had a fit when I saw how slow it gets to add indices to arrays, like it starts quite fast, then get's slower and slower.
I think that handling a lot of bullets should be done internally, like not using visible objects, pure maths and collision checks. The thing is, using a point to point bullet path, you don't have to worry about missing targets - line intersect checks are very accurate, and line-circle checks can be used for character bullet collision, you just need the rough radius of each limb on your character.
Personally, I reckon I'd forget about making the bullets visable, I'd use lots of particle effects for when the bullets ricochet - would probably make the game idea a little more difficult, but it's an idea.
Always consider the other factors when deciding on how many bullets you want, ideally keeping the count low. I mean, if you have 25 characters and even just 500 bullets, then your doing 12500 collision checks per loop

. So always have a life variable for your bullet, so that you can set a bullet to being dead and can skip collision checks on it. It's a good idea to do a box collision check as well, like if the bullet is close to the character then check for collision, otherwise skip it. It can be real tricky to get smooth bullet handling.
Van-B

Put those fiery biscuits away!