Dispersion is a general term referring to weak, long-range dynamic correlations in electronic structure (and includes van der Waals interactions). These interactions are not well modelled by standard DFT functionals, and the development of approaches to fix this has been a growth area in DFT recently. I will cover the most common approaches here, at a relatively non-technical level, but there are many references at the end which give much more detail. Probably the most important piece of technical information in this area is that the leading term in a distance-based expansion of the dispersion energy falls off as 1/r^6, and the expansion coefficients of this term are often known as C6 coefficients. Most practical approaches to dispersion use semi-local forms: the interaction is either between pairs of atoms or between two points in space.
We can divide approaches to dispersion in DFT into four areas, becoming steadily more accurate (and expensive) as we progress: semi-empirical, pair-wise approaches to the C6 terms, such as DFT-D2; approaches which go beyond semi-empirical, and introduce environment-dependent C6 coefficients and some ab initio information, such as DFT-D3 and TS; density functional approaches based on the vdW-DF-04 of Langreth and Lundqvist (and co-workers); and approaches which go beyond pair-wise additivity, such as many-body dispersion and the random-phase approximation (RPA). Many of these are available in standard DFT codes, though the functionals with which they can be paired vary from method to method (and can have a strong effect on their accuracy).
Almost all pair-wise approaches also introduce scaling factors. A short-range scaling is used to turn off dispersion when atoms are close together (both for pragmatic and physical reasons: 1/r^6 diverges as r becomes small, and dispersion is negligible at small distances). A long-range cutoff or scaling is also common, to remove unnecessary computational load and reduce scaling; pragmatically, the 1/r^6 scaling will make this an excellent approximation.
Semi-empirical approaches, the most well-known of which is the DFT-D2 approach, fit C6 terms to ab initio or experimental data. DFT-D2 was based on a particular GGA functional (at least in the original paper, though it is now used with many others) and adds C6 terms pair-wise between all atoms, hence giving a formal scaling of N^2. The C6 terms are calculated from atomic polarisabilities, and take no account of the environment; the approach is aimed at biomolecules in the main, where it has had significant success; it is, however, essentially a force-field.
Including environment dependence as well as ab initio data makes approaches significantly more transferrable. The TS method starts with C6 coefficients found for interactions between free atoms, calculated with self-interaction corrected TDDFT. These terms are assembled and weighted using a scheme to divide the ground state DFT charge density and assign contributions to atoms at different points in space. The DFT-D3 method also uses TDDFT calculations for polarisabilities (though with a hybrid functional – which can have a similar effect). The method calculates not just pair-wise C6 terms but also three-body C9 terms (using a geometric mean of the isolated C6 terms), and weights the C6 terms via a coordination number. Both methods are more sophisticated than a simple force field approach, and allow the geometry or DFT density to influence the calculations. They are applicable to most of the periodic table, and are accurate and fast.
The next stage in accuracy is to base the dispersion calculation on the DFT density itself. All functionals in this class are based on the work of Langreth, Lundqvist and co-workers, known as vdW-DF. The approach is to take a double integral over a pair of points in space, and at each point calculate the product of the charge densities at the two points and a kernel which depends on both points. The form of the kernel, of course, is the key point that determines the accuracy and effectiveness of the method. The original vdW-DF is based on the frequency-dependent plasmon-pole model (which is the correct physics), and is accurate for many different problems. The method was extended to be self-consistent and has been updated to improve the response of the functional to gradients in the charge density, making it more accurate (these functionals are commonly known as vdW-DF04 and vdW-DF10). A significant variant on the kernel used was proposed and optimised by Vydrov and van Voorhis: this approach is numerically simpler, but makes approximations which are somewhat controversial (there is a Comment and a Reply if you follow the Phys. Rev. Lett. reference below). There have been a number of papers on implementing these kernels, which are numerically demanding, the most important of which uses a factorisation of the kernel and fast fourier transforms to reduce the scaling to N log(N). This implementation is available in SIESTA and as a stand-alone package, and is an important contribution to the community. There have been a number of investigations of how the exchange functional paired with this functional can affect energy; one of these (which I co-authored) found that chemical accuracy could be achieved.
Going beyond pair-wise interactions is challenging. The TS method has been extended to include many-body dispersion by representing interactions between atomic densities in terms of quantum harmonic oscillators. The method uses the electron density from DFT, and involves the diagonalisation of a Hamiltonian with the dimension of the number of atoms. As the name suggests, the method includes terms beyond two-body, and effectively sums the coefficients to infinite order. It requires the fitting of a range-separation parameter (to prevent the small distance divergence). The other main method is the RPA (random phase approximation)[6,12] which is an approach to separating the one-particle and collective degrees of freedom for an electron gas. The RPA has been included into DFT, and is a good approximation to correlation, including dispersion effects; it is often applied post hoc, in other words non-self-consistently, and is computationally expensive, scaling as N^4 at best.
What can we conclude ? At present, the cheapest, reasonably reliable approaches are DFT-D3 and TS, which add little to the cost of a standard DFT calculation, and are available in various codes (both, I think, are in VASP and QuantumEspresso). An implementation of DFT-D3 and a complete set of coefficients are freely available from Stefan Grimme. The vdW-DF functionals, in whatever form you choose, are more expensive, but are more satisfying to many people, as they do not impose any division into atoms or fragments. For now, I would say that the many-body work is still experimental, and should only be tackled by experts. But overall, dispersion can now be included in DFT calculations with some confidence, and should be a part of most investigations.