Actually your GPU will have a little impact on your view-port fps when playing animation. If you are able to rotate/navigate without lag, your GPU can handle the geometry fine (almost any modern GPU will handle millions of polys). Then if you get slow fps in playback the bottleneck is somewhere else.
If you get lag in just navigating view port check the OpenGL settings in User Preferences under System tab. Enable VBO.
Between each frame, the scene has to be updated with all the objects inside - this happens on CPU. Behind the scene this is managed by Dependency graph - a structure that keeps track what is dependent on what (parenting, constraints, ..). The current dependency graph is obsolete and is single threaded in many places = does not use all the CPU power, has poor optimization = is re-evaluated in cases where it is not needed, etc.
You can try the new DepsGraph with a command line argument (see the link above).
Things to do to help your animation fps (if anyone has other tricks or I forgot some feel free to expand the list):
If there are simulations/particles always bake or at least cache them so they don't need to be recalculated between frames.
If there are deformations on subdivided geometry use Simplify in Scene properties to limit the subdivisions - less vertices have to be updated. Or try the OpenSubdiv option to calculate it on GPU (but this still has limitations)
Close any other view-port windows - have just one. Set it to Only Render in the Display settings in Properties panel (N). If you have animated textures close also Image/UV windows.
If your deformed geometry doesn't change vertex order/count you can export it as .mdd file format and import back in Blender or bake it into Shape Keys.
There is not much else you can do, if nothing works the scene is just too complex and your only option is to preview the animation with OpenGL preview render (button in view-port header)