This has been discussed in depth by the BCL team, see the blog entries
In essence there is no way to do this within .Net code and stick to the BCL. Too many functions rely on being able to canonicalize the path name (which immediately triggers the use of functions expecting MAX_PATH to be obeyed).
You could wrap all the win32 functions that support the "\\?\" syntax, with these you would be able to implement a suite of long path aware functionality but this would be cumbersome.
Since a vast number of tools (including explorer[1]) cannot handle long path names it is inadvisable to go down this route unless you are happy that all interaction with the resulting file system goes through your library (or the limited number of tools that are built to handle it like robocopy)
In answer to your specific need I would investigate whether the use of robocopy directly would be sufficient to perform this task.
[1] Vista has ways to mitigate the issue with some fancy renaming under the hood but this is fragile at best)