Git has several solutions for your need. But as you don't want to use submodules or sparse-checkout I don't see any well established Git practice that fit's your needs.
Perhaps you should reconsider your thoughts on submodules or sparse-checkout.