Contract factory function causes contract to exceed size limit

I'm writing a smart contract where one of the functions deploys a payment splitter contract that inherits from OZ PaymentSplitter.sol. I'm doing something like this:

function splitterFactory(address[] memory payees, uint256[] memory shares_) internal {
splitterContract _splitterContract = new splitterContract(payees, shares_);
}

(splitterContract only has a few extra functions than the base OZ PaymentSplitter.sol, so only slightly larger)

when this function is marked as internal or private, it compiles just fine. If it's public or external, my smart contract is too big and does not compile. using hardhat-contract-sizer i can see that by changing this single function from internal to public adds over 10 kb to my final, most derived contract.

my question is, is this normal? is there any tricks to fix this? does cloning or proxies take up less space? should I just deploy a contract factory separately on its own? I tried using solidity optimizer in hardhat to no success.

Thanks! Nolan