The quick solution is to NOT seperate your .DLL files from the .EXE. Put them all in the same folder.
When a .DLL is needed the assembly resolver will look in the same folder as the .EXE calling for it (by default, it will NOT look in subfolders!) If it is not there, it'll start walking the PATH environment variable looking for it.
The long answer is to tell the assembly resolver where to probe for .DLLs (assemblies). You put this in your applications initialization code:
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "mySubFolderName";
The specified sub folder MUST be a subfolder under the .EXE launch folder for this to work:
C:\Program Files
myCompanyName
myApplicationName <-- your .EXE goes in here
DLLs <-- your .DLLs go here