When to create a new bucket?

I’ll simplify the answer but we can doubleclick if you have stats on size of data, mutations rate and more.
There are a indexers in the system (map/reduce, global index and spatial). The general way in which these work is each indexer there is a filter clause. With N1QL for example, you’d say
CREATE INDEX ind1 ON bucket1(attrib1) WHERE type=“type1”;
this will ensure the index only apply to the specific type and it will ensure that the projector (see the arch guide here) sends the relevant information to the index based on this index definition. So the impact of mixing types in a bucket is fairly small.
That said, there is still some overhead to checking the type in each case. We only recommend that you start splitting the data into multiple buckets in cases where a type is very sensitive to these latencies in indexing and mutation rate between types are drastically different.