Dynamic and static linking are methods of sharing library code in modern computer operating systems.  
Dynamic linking happens at runtime.  It trades a little bit of extra work at startup time for some nice features like allowing the library to be patched/replaced which in turn can fix or add features to applications which are linked (bound) to it.
Static linking is where portions of the library are copied into the executable.  This is faster for startup and sometimes more convenient for distribution because you don't have to worry about whether the recipient has all the shared libraries.  It can also save space in some cases.  It's common for embedded applications.
http://en.wikipedia.org/wiki/Dynamic-link_library
http://en.wikipedia.org/wiki/Static_library
The binding by name refers to the process of linking functions, variables, and constants from a library into an application, module of an application, or another library.  Basically a library is an archive of code and there's a table which points to each compiled bit of code's location in the library, and the linker uses the names to look up where the bits are that are needed.  Like a phonebook =)
Binding and Linking are used interchangeably in a lot of contexts.  
Think of it this way: Binding by name the reference remains by name, lookups will have to search some sort of namespace to resolve accesses.  With linking the name is converted into an address, generally just the one time, and then the name is no longer required.  Linking is fast for multiple accesses.  
Some binding systems may implement an address cache to speed up lookups.  A good example is your desktop's ARP cache, which caches IP addresses which were looked up by name using a DNS server (coincidentally, the most-used DNS server is called "bind".)
Scripting languages often bind things by name instead of linking, because the overhead of doing name-based lookups isn't as big a penalty when the language itself is interpreted.