The main concern when destroying large (or frequent) amounts of objects is garbage collection. This is an automatic process which collects dead references from memory, basically a cleanup. In some programming languages you got to do this yourself, which both gives you more control… but also makes it easy to miss something and introduce memory leaks.
Garbage collection obviously, as anything else, takes time. Usually this happens between two frames, so it can introduce quite a noticable spike in frametimes, if a lot of cleanup has to happen at once.
However, object pooling and other approaches fall in the category of optimizations. And the general rule of thumb concerning optimizations is to never do optimizations “just because”. First implement a very simple solution to get it working, for example by using Destroy() as mentioned by @jlorenzi .
If you then notice an actual performance problem, using the inbuild Unity profiler (which also tells you where exactly that problem is), you can then start to think about optimizations. Due to how powerful moder hardware is, for most games and most issues it wont come this far - which is why the rule of thumb says to simply not opzimize until you hit a measurable problem.
The idea of object pooling is to prevent garbage collection by recycling existing objects instead of constantly creating and destroying them as needed. For that you usually either instantiate all necessary objects, or do so dynamically while playing. However, you usually dont destroy any of them. Instead of instantiating a new item, you get one from this pool and activate it. Instead of destroying it, you return it to the pool (and possibly reset its state, if necessary) and deactivate it. Thus only the same objects are used, removing the need for garbage collection to run at all. While this might sound counter intuitive, overall memory consumption can end up lower as well, since the actual amount of objects you need is likely lower than what you would have active by instantiating things and then destroying them on a timer. However, memory should really be of “no” concern in modern times, i just thought it was a fun fact to add.
While object pooling is a nice idea, it would not be my first go-to solution, even if you notice a measurable performance problem using the profiler. Unity introduced incremental garbage collection a while ago, which spreads the load over multiple frames.
Enabling this is likely enough to reduce the problem to a level you wont notice anymore. If that’s still not enough, then you can think about object pooling or other approaches like it.