Абстрактный базовый класс звучит как лучший вариант в этой ситуации. Конечно, все зависит от того, какое общее поведение имеют эти элементы. Не зная больше, я бы предположил, что у всех этих позиций заказа есть Имя и Цена, например - и в будущем вы можете добавить более общие вещи.
Без общего базового класса, который содержит свойства Name и Price, у вас, вероятно, возникнут проблемы с реализацией метода CreateOrderTicket, который принимает список, содержащий более 1 вида заказов.
Кроме того, я не думаю, что наследование от абстрактного базового класса было бы слишком дорого, поскольку технически объекты уже получены из базового класса Object. (Хотя я не думаю, что это полностью соответствует пользовательскому базовому классу.)
VB.Net может реализовывать методы из интерфейса, используя имя, отличное от имени, указанного в интерфейсе, но не думаю, что то же самое касается переопределения абстрактной функциональности.