I am rendering an object with many small pieces (500) and two base geometries. There is a limit of 256 pieces but 1000 transformations?
If you are using lists as inputs of the display components, your small pieces will be merged into a single one and therefore you should not have any issues with those limitations.
If you are feeding trees, they will count as separate data parts and you will be limited to a total of 256. However, unless you want to differentiate each piece through the API, there is no reason for you to use trees.
As you are mentioning, if you are only using two base geometries, you should definitely make use of transformations. There is a limit of 1024 transformations per output component, so in your case you could use two output components (one for each base geometry) and attach transformations to each base geometry. With that strategy, you end up with only two data parts and should be able to stay way under the transformation limit.
I encourage you to read the documentation about those limitations for more details and example definitions: