Non c'è un approccio corretto: l'importante è che il compilatore sappia dove trovare header file e source file. Un approccio molto seguito è mettere tutti gli header file in un percorso e i source file in un altro.
Non c'è nessuna relazione tra namespace e directory: un namespace introduce soltanto una ulteriore elemento di distinzione tra una tua classe e una classe omonima scritta da qualcun altro, ma al compilatore non importa se lo stesso namespace è presente in più file e in cartelle diverse.