Is there a way to add a column to a table without affecting performance?
For Postgres, adding a column without a default value is essentially a no-op as only the catalog tables get rewritten. 

Apart from the short exclusive(!) lock there is no performance impact.

Although that lock is only held for a very short time, getting the lock on a busy system might be a problem because all open transactions and queries need to be finished before this lock can be acquired. And of course you need to make sure that the DDL gets committed immediately, because every access (including read-only selects) will be blocked until the alter table is committed.

Adding a column with a default value is a different thing though - that will affect performance because it is updating all existing rows with the default value. 

If I'm not mistaken MySQL always rewrites the full table (and all indexes) if you add (or drop) a column (but it's been a while since I used MySQL so things could have changed). 

Oracle works the same as Postgres. 

I don't know about SQL Server, but I would be surprised if it did it differently.