The biggest bang for your buck, is optimizing the combo to obtain the highest possible compression. Efficiency of an IC engine is related to the compression ratio, so the highest compression possible, yields the best combo. If starting from scratch (i.e., you're rebuilding), you want to optimize the compression to be the highest possible to work with the octane of your choice and the power band of your choice. Next you want an ignition that allows you to run the largest possible spark plug gaps. Larger gaps give more power, but you need the voltage to make sure it can bridge the gap.
You can mess around with the heads, but unless you know what you're doing, you can really make a good set of heads turn into scrap. For "fast burn" heads, their nature is to have the intake shrouded to an extent to promote swirl. This limits valve size, as going too big will kill the fast burn characteristics. So you can have some improvement, but not a tremendous amount. Older heads that are not fast burn, are of course have more flow potential, but the fast burn helps with increasing compression. So you sacrafice compression for flow, which I would think the added compression would be the better route.
If sticking with carb, that also limits you compared to EFI, as you can't have an ideal carb manifold that sits under a hood. EFI you can do what ever you'd like to get runner length, since you don't have to worry about wet flow. In a carb, the intake itself will always be some kind of compromise. Carb spacers do help, but we're not talking about huge power gains either. Then there's tuning, as EFI will always give you more flexibility to maintain the fuel ratio of your choosing, regardless of barometric pressure and throttle position.