The first thing you need to know is that you are not actually hitting the database when you filter, so you can do the filtering multiple times without losing to much performance, a first approach can be:
results = Path.objects.all()
for s in search.split():
results = results.filter(path__icontains = s)
that is for AND ans you can use a similar approach for or.