Есть ли какая-то конкретная причина, по которой вы хотите сделать метод статичным? Если вы хотите наследовать метод GetItems в своих дочерних классах, вы не можете сделать его статическим. Чтобы ответить на ваши вопросы по порядку:
1) Да. Создайте новый класс, называемый чем-то вроде ItemManager, который выполняет фактический вызов уровня DB для получения Предметов. Таким образом, вы отделяете свой код доступа к данным от бизнес-логики
2) Вы должны создать метод в Item Class, который вызывает метод в ItemManager для получения фактических данных.
3) Пометьте метод, созданный на шаге 2, как виртуальный, если вы хотите, чтобы дочерние классы переопределяли метод для обеспечения собственной реализации. Если вы хотите заставить их переопределить и не нуждаются в реализации в самом базовом классе, пометьте базовый класс как абстрактный, чтобы дочерний класс должен его переопределить