Adapting the code given in A102894, a brute force approach would be this.
(* Warning: Only use with n <= 4 *)
allCandidates[n_] := Subsets[Subsets[Range[n]]];
allAdmissibleFamilies[n_] := Select[allCandidates[n],And[
MemberQ[#,{}],
MemberQ[#,Range[n]],
SubsetQ[#,Intersection@@@Tuples[#,2]],
SubsetQ[#,Map[{#}&,Range[n]]]
]&];
a[n_] := Length[allAdmissibleFamilies[n]];
With this I get
Table[a[n],{n,0,4}]
(* {1,1,1,8,545} *)
One can also look at the families, for example
allAdmissibleFamilies[3]
(*
{{{},{1},{2},{3},{1,2,3}},
{{},{1},{2},{3},{1,2},{1,2,3}},
{{},{1},{2},{3},{1,3},{1,2,3}},
{{},{1},{2},{3},{2,3},{1,2,3}},
{{},{1},{2},{3},{1,2},{1,3},{1,2,3}},
{{},{1},{2},{3},{1,2},{2,3},{1,2,3}},
{{},{1},{2},{3},{1,3},{2,3},{1,2,3}},
{{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}}}
*)
Note. This code has the benefit of being very readable. I think that might be its only benefit. Not only does it try all candidates, it even generates all candidates at once, which means that one immediately runs out of memory. Hence the recommendation to only use this for n <= 4
. The first improvement would be a more memory-friendly brute force approach.