There's two main reasons that that infantry combat pretty much sucks in BF42 (never played BFV, so I don't know if it ever got improved)...
The first reason is that the game seems to use server-side hit detection, where each shot has to be verified with the server, as opposed to a game like UT or HL, which use client-side detection, which has the client reporting if an individual player's shot connected with something. This actually affects not only the infantry combat, but vehicular combat as well. If you're ever dogfighting with another player, you may have noticed that even though you can appear to be firing directly into their tail and doing tons of damage, with debris flying off and everything, you won't do any damage at all, but if you fire ahead of where you should be firing, you'll take them out pretty quickly. This is due to the fact that you have to lead to compensate for the time it takes for the server to verify your shots. The same applies in infantry combat. Even if your target is at point blank range, if they're moving at all, you need to shoot pretty far ahead of them to actually score a hit. This, combined with the second reason listed below, makes it actually easier to kill somebody at long range than it is at short range, which is exactly the opposite of what it should be.
The second problem with infantry combat (which is something I just discovered relatively recently), is the way the BF engine handles bullet spread and accuracy. As I'm sure you know, moving around increases the size of your crosshair, representing reduced accuracy. Even when accounting for this, you'd think that up close, the accuracy doesn't matter, as the shots should be going in a cone pattern. However, shots from the machine guns in BF spread out in a cylinder shape, with all the shots moving on parallel paths.
So basically, instead of every shot originating from the barrel of your virtual gun and moving outward in an increasing spread as your accuracy drops, the area the shots originates from expands as accuracy drops, yet the shots all travel in the same direction you're aiming. So basically, this also makes it so that the shot spread is just as bad at point blank range as it is at long range. This is why you can seemingly unload an entire clip into a stationary player at point blank range and not kill them. As soon as your accuracy drops, your shots are no longer coming from the barrel of the gun, and are most likely completely missing.
The best way to see exactly how it works is to download the Galactic Conquest mod. As a Star Wars-based mod, all of the infantry weapons have visible projectiles, so you can actually see the cylinder effect in action.