With using ISERROR(), and checking both parts of your function, the possible solution may be (be careful to keep relative/absolute references correct):
1. Activate any cell in row 2 and define a dynamic Name (I assume the sheet name is Sheet1), e.g.
Code:
nDynamicName1 = LEFT(Sheet1!$C2,FIND(" ",Sheet1!$C2,FIND(" ",Sheet1!$C2,1)+1))
;
2. Remain in row 2 and define another dynamic Name, e.g.
Code:
nDynamicName2 = RIGHT(Sheet1!$C2,LEN(Sheet1!$C2)-FIND("-",Sheet1!$C2))
;
To return empty string whenever C2 is empty, C2 whenever nDynamicName1 or nDynamicName2 returns an error, and your formula result otherwise, the formula in any column of row 2 will be
Code:
="" & IF(OR(ISERROR(nDynamicName1),ISERROR(nDynamicName2)),$C2,nDynamicName1 & nDynamicName2)