You cannot use any Microsoft.AspNet.*
packages greater than 4.* in MVC 4. It will not work. The runtimes are different. Loading a v5.* version of MVC into the MVC 4 runtime will have undefined behavior. Until you upgrade to MVC 5 you will need to stick with MVC 4 binaries including all Microsoft.AspNet.*
packages. There is no workaround for this.
A binding redirect is strictly for the assembly loader (fusion) to use. When you reference assemblies that are strongly named then your binary is hard coded to use only that version. If any other version is found then it will fail to load. This is a compatibility and security feature and only applies to strongly named assemblies. In some cases you need to use a newer version of an assembly but you cannot update the dependencies at build time. In this case a binding redirect tells the runtime that any request for versions (0.0.0.0-w.x.y.z) will instead use version w.x.y.z. The upper end is always the same as the version you want to load. Hence if your code previously targeted v1.2.3.4 but you have applied a patch to the dependency that now is v1.3.0.0 AND there is no compatibility issues then you can put in a binding redirect telling the runtime to load the v1.3.0.0 version whenever you request any version between 0.0.0.0 and 1.3.0.0.
The use case for this is very specific and, if misused, can cause runtime errors. The use case is when your project X relies on some assembly A that itself relies on some assembly B. Assembly B, through whatever scenario, has a newer version that you need to use. You update project X to depend on the newest version of assembly B. However assembly A (that you also rely on) will fail because it expects the old version. Adding a binding redirect tells the runtime that when assembly A looks for the older version then go ahead and load the newer version anyway. It is up to you to confirm that the versions are compatible and that it won't break the code. The runtime just loads what you tell it to.
Now back to what you're trying to do. If you have an assembly that relies on MVC 5 AND you are targeting MVC 4 then no amount of binding redirect is going to help here. The assemblies are a major version different AND they are not compatible. So while a binding redirect might allow the assembly to load (unlikely since it also has dependencies that would need redirects) they are not compatible and therefore you'll get runtime errors.
The only workaround is to either upgrade your solution to MVC 5, in which case all the problems go away, or host 2 separate web apps (one MVC 4 and one MVC 5). The MVC 4 app, when it needs to use functionality defined in MVC 5) would need to proxy calls over to the other app. You cannot load MVC 5 binaries into an MVC 4 runtime.