How to use the same EntityListBuilder for entity A and an extended version B
Your questions cover quite a few unrelated concepts, but here's an attempt at answering nonetheless.


Create a 'Person' base class and extend that into 'Contact' and 'Artist' classes. This approach will isolate your Artist entity type form changes you need to make to the Contact class and vice versa. Adding a company-field would, as an example, probably not apply to your artists.
I would use a content-view with a filter, only showing contacts and artists types. Re-using common fields on the 2 entities will make creating such a view a no-brainer.
Afaik the parent list-builder class does not support multiple entity types. The constructor for the list-builder class, accepts $entity_type as one of its arguments, so unless you write your own list-builder, you are limited to 1 type per list.
The getViewsData() method exposes properties from your entity type to the views api. Extending the EntityViewsData class, like you did, auto-generates the view-data through the inherited methods. Core provides some usage examples; e.g. UserViewsData. Use your IDE to search for "extends getViewsData()" for more examples.