Asking 4 questions in one isn't a good idea.
Are there specific situations where one is preferable?
Generally setting the property is preferred as it's simpler and historically more reliable.
Is one faster than the other?
Logically, setting a property should be faster than calling a method, but the difference is likely negligible to irrelevant.
How do they differ?
setAttribute sets the attribute value. Attributes are reflected in properties. Historically, setting the attribute didn't always change the property and vice versa.
Why even have 2 ways of doing it?
Attributes existed in HTML before javascript, you can think of them as what's in the markup. DOM properties were reflections of attributes, mostly. E.g. once upon a time, a form control's value attribute reflected the default value, whereas the value property reflected its actual value. But many of these differences are going away.
Setting a property that is not a reflection of a standard same–named attribute does not create an attribute of that name (except for a couple of exceptions were the property has a different name to it's related attribute such as class/className and for/htmlFor).
There are many articles on attributes vs properties, many are corrupted by jQuery attr vs prop questions but if you read enough you'll get the picture.