You can use CASE statement
select Firstname
|| case when Middlename <> '' Then '-'||Middlename else '' END
|| case when Surname<> '' Then '-'||Surname else '' END
As per your sample data I have check for empty string. To check NULL use Middlename IS NOT NULL instead of Middlename <> ''