strcpy и strncpy будут копировать каждый байт из одной ячейки памяти в другую. Чтобы поменять содержимое, вам придется сделать это 3 раза: firstString в tempBuffer, secongString в firstString, а затем в буфер в secondString, что явно не очень эффективно. Но если вы манипулируете указателями, то нужно переставлять только указатели (не полное содержимое).
Другими словами, метод strcpy будет менее эффективен, как только общий размер firstString + secondString будет больше, чемудвоенный размер указателя (обычно 2x4 байта, но зависит от архитектуры процессора)